Halcon 算子 edges_sub_pix 亚像素定义以及滤波器(一)

 

Halcon 算子 edges_sub_pix 亚像素定义以及滤波器(一)_第1张图片

利用Deriche、Lanser、Shen和Canny滤波器提取亚像素精度边缘;

亚像素:

面阵相机的成像面的最小单位是像素,例如某芯片的像素间距为5.2微米,在相机机拍摄时,将物理世界中连续的图像进行了离散化处理;到成像面上每一个像素点只代表其附近的颜色,至于“附近”到什么程度?就很困难解释。两个像素之间有5.2微米的距离,在宏观上可以看作是连在一起的,但是在微观上,它们之间还有无限的更小的东西存在,这个更小的东西我们称它为“亚像素”;实际上“亚像素”应该是存在的,只是硬件上没有个细微的传感器把它检测出来。于是软件上把它近似地计算出来。

亚像素的精度:

亚像素精度是指相邻两像素之间细分情况,输入值通常为二分之一,三分之一或四分之一。这意味着每个像素将被分为更小的单元从而对这些更小的单元实施插值算法。例如,如果选择四分之一,就相当于每个像素在横向和纵向上都被当作四个像素来计算。

亚像素的应用:

在机器视觉中,亚像素是一个比较常见的概念,在许多函数中,都可以选择是否使用亚像素,而在测量中,如位置、直线、圆等,都会出现亚像素。如测量某个圆的直径为100.12像素。这个后面的0.12就是亚像素。因为从像素中可以理解到,工业相机最小物理单元其实就是像素,但是在机器视觉测量中还是会得到小数点后的值,这个就是通过软件计算得到的,其实在真实情况下,并不一定是十分准确的。这个值通常在灰度图中会更容易反应出来,而在二值图像中,因为值只有0,1。因此很多函数并不一定会计算亚像素。

 

边缘检测定义:

边缘检测是图形图像处理、计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域,在一维空间中,类似的操作被称作步长检测(step detection)。边缘是一幅图像中不同屈原之间的边界线,通常一个边缘图像是一个二值图像。边缘检测的目的是捕捉亮度急剧变化的区域,而这些区域通常是我们关注的。在一幅图像中两度不连续的区域通常是以下几项之一:

     (1)图像深度不连续处

     (2)图像(梯度)朝向不连续处

     (3)图像光照(强度)不连续处

     (4)纹理变化处

理想情况下,对所给图像应用边缘检测器可以得到一系列连续的曲线,用于表示对象的边界。因此应用边缘检测算法所得到的结果将会大大减少图像数据量,从而过滤掉很多我们不需要的信息,留下图像的重要结构,所要处理的工作即被大大简化。然而,从普通图片上提取的边缘往往被图像的分割所破坏,也就是说,检测到的曲线通常不是连续的,有一些边缘曲线段开,就会丢失边缘线段,而且会出现一些我们不感兴趣的边缘。这就需要边缘检测算法的准确性。

如下图所示图片:

Halcon 算子 edges_sub_pix 亚像素定义以及滤波器(一)_第2张图片

 

边缘检测算法基本都是基于微分的数学基础之上的。一般都是先对图像进行滤波处理,然后再进行阈值分割。由于一阶微分只需要使用一个滤波器就可以满足要求,因此一般使用一阶微分来读取边缘的。由于有的时候剖面上噪声太多,影响取图质量,所以要对剖面图的图像进行滤波处理。这里就涉及到两种卷积运算:一种是用于图像平滑处理的滤波器卷积计算;另一种则是用于对图像进行求导的滤波器卷积计算。

由于,所以我们一般只对滤波器算子进行微分再求卷积来得到平滑后的图像微分,从而获取边缘。

 

边缘滤波器选取有三个准则:

       一是边缘滤波器产生的输出信噪比要最大化,这样可以对一个边缘点的错检和漏检可能性要低;

       二是提取出来的位置方差要最小化,这样提取出来的边缘更靠近真正的边缘;

       三是提取出来的边缘位置之间的距离要最大化,这样边缘检测器对每个真正的边缘只返回唯一的一个边缘,可以避免多重响应。

Halcon 算子 edges_sub_pix 亚像素定义以及滤波器(一)_第3张图片

参数翻译:输入图像、输入边缘、滤波器、滤波参数、滞后性阈值的下限值、滞后性阈值的上限值

 

滞后性:简单的说就是延迟,落后;一个现象与另一密切相关的现象相对而言的落后迟延,尤其指物理上的果没有及时跟着因而出现;

 

滞后性阈值的描述:

 使用边缘滤波,得到的边缘都是大于一个像素的轮廓,因此要对所得到的图像进行骨架化,从而得到比较清晰的边缘轮廓。有时候还需要进行非最大抑制处理

 这样,经过先对边缘幅度进行阈值分割,然后对分割出的区域进行骨架化处理,再进行非最大抑制处理,一般就可得到清晰的边缘。但是,有时候我们选择高的阈值以保证只将相关边缘选出时,边缘通常被割裂成诺干段;另一方面,如果选择低的阈值以保证边缘不会断裂成一段一段时,我们最终的分割结果中又会包含很多不相关边缘。针对这种情况,Canny提出来一种特殊的阈值分割算法来分割边缘:滞后阈值分割。

       滞后阈值分割使用两个阈值----高阈值和低阈值。边缘幅度比高阈值大的那些点立即作为安全边缘点被接受。边缘幅度比低阈值小的那些点被立即剔除。边缘幅度在高阈值和低阈值之间的那些点按如下原则处理:只有在这些点能按某一路径和安全边缘点相连时,他们才作为边缘点被接受。组成这一路径的所有点的边缘幅度都比低阈值要大。我们也能把这个过程理解为,首先边缘幅度大于高阈值的所有边缘点,然后在边缘幅度大于低阈值的情况下尽可能延长边缘。

 

 

 

描述:

edges_sub_pix可以使用递归滤波器,如Deriche、Lanser和Shen;或者使用传统滤波如“高斯导数”滤波器(使用滤波器掩模)来检测边缘,所以edges_sub_pix的滤波器(参数filter的选项)可以有以下几种:

使用以上方法后,可以通过get_contour_attrib_xld来获取亚像素边缘的属性,函数定义如下:

对应参数翻译:输入轮廓、需要获取的属性、属性值,需要获取的属性可以有以下几种:

需要注意的是,不是每个滤波器都有以上的所有属性:

除‘sobel_fast’外,都有的属性只有三个:

'angle' 角度

'edge_direction' 方向

'response' 振幅

 

你可能感兴趣的:(Halcon算子,计算机视觉)