Halcon 第四章『图像特征和提取』◆第5.1节:亚像素级边缘提取—轮廓生成

        第5.1节:亚像素级边缘提取&相关算子

        概念:摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。两个像素之间有5.2微米的距离,在宏观上可以看作是连在一起的。但是在微观上,之间还有无限的更小的东西存在。这个更小的东西称为“亚像素”。在两个物理像素之间还有像素,称之为Sub-Pixel。Halcon中用XLD(eXtended Line Descriptions)表示亚像素的轮廓和多边形。亚像素的方法常用于图像的边缘检测和定位。

        亚像素常用的软件算法有矩估计方法、插值法和拟合法。其中插值法的核心是对像素点的灰度值或者灰度值的导数进行插值,增加信息,以实现亚像素边缘检测,应用较多的有二次插值、B样条插值和切比雪夫多项式插值等。拟合方法是通过对假设边缘模型灰度值或者灰度值的导数进行拟合来或者亚像素的边缘定位。

        红色放快点为物理像素,放开点之间的小圆点则为亚像素。根据方块点的灰度值,用软件算法计算出每个亚像素点的灰度值,相当于将5×5的图像扩展为17×17的图像。

         ①edges_sub_pix算子

        Filters滤波器 / Edges图像边缘处理

        使用Deriche,Lnser,Shen或cnnyfilters滤波器提取图像的亚像素精确的边缘

edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

        Image:输入参数,输入单通道图像。

        Edges:输出参数,输出XLD亚像素轮廓。

        Filter:输入参数,选择的滤波算子,默认 'canny'。常用: 'canny','lanser2'。'lanser2'的有点是,它是一个递归的实现,当加大平滑的力度时,计算时间却不会因此增加。如果图像质量比较好,噪声也比较小。如果对速度有要求,则选择'sobel_fast'算子,因为它的速度比较快,但缺点是对噪声敏感。

        以_junctions结尾的滤波器,适用于一些非连接的边缘。

【 'canny', 'canny_junctions', 'deriche1', 'deriche1_junctions', 'deriche2', 'deriche2_junctions', 'lanser1', 'lanser1_junctions', 'lanser2', 'lanser2_junctions', 'mshen', 'mshen_junctions', 'shen', 'shen_junctions', 'sobel', 'sobel_fast', 'sobel_junctions'】

        Alpha:输入参数,表示平滑程度。其值越小,表示平滑的程度越大。默认1.0,范围>0。

        Low,High:输入参数,边缘的振幅区间。【默认20,Low > 0】【默认40,High > 0 && High >= Low】

        表示滞后阈值的低阈值和高阈值。低阈值越低,图像的细节会越丰富。高阈值用于将边缘与背景区分开来。高于高阈值的像素可以确定是边缘,这些边缘是强边缘,但往往不是连续的,因此需要用一些弱边缘进行补充。低于低阈值的像素可以被认为一定不是边缘。高于低阈值有低于高阈值的部分像素是弱边缘,需要进行判断。如果该像素的相邻像素是边缘,则该像素被认为是边缘,否则就不是。

read_image (Image, 'data/flower') 
*转换为单通道灰色图像
rgb1_to_gray (Image, GrayImage)
*进行亚像素边缘提取。分别使用了不同的滞后阈值以便进行对比
edges_sub_pix (GrayImage, Edges1, 'lanser2', 0.5, 5, 50) 
edges_sub_pix (GrayImage, Edges2, 'lanser2', 0.5, 25, 50) 
edges_sub_pix (GrayImage, Edges3, 'lanser2', 0.5, 5, 25) 
原图
Edges1 振幅区间5-50
Edges2 振幅区间25-50
Edges3 振幅区间5-25

         ②edges_color_sub_pix算子

        Filters滤波器 / Edges图像边缘处理

        使用Deriche, Shen,或Canny算子提取彩色多通道图像的亚像素边缘

edges_color_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

        Image:输入参数,读取多通道图像。

        Edges:输出参数,输出被提取的边缘轮廓。

        Filter:输入参数,选择滤波器。以_junctions结尾的滤波器,适用于一些非连接的边缘。

        【 'canny'精细, 'canny_junctions', 'deriche1', 'deriche1_junctions', 'deriche2', 'deriche2_junctions', 'shen', 'shen_junctions', 'sobel_fast'】

        Alpha:输入参数,滤波系数。默认1.0,范围>0。

        Low, High:输入参数,边缘的振幅区间。【默认20,Low > 0】【默认40,High > 0 && High >= Low】

        表示滞后阈值的低阈值和高阈值。低阈值越低,图像的细节会越丰富。高阈值用于将边缘与背景区分开来。高于高阈值的像素可以确定是边缘,这些边缘是强边缘,但往往不是连续的,因此需要用一些弱边缘进行补充。低于低阈值的像素可以被认为一定不是边缘。高于低阈值有低于高阈值的部分像素是弱边缘,需要进行判断。如果该像素的相邻像素是边缘,则该像素被认为是边缘,否则就不是。

read_image (Image, 'data/flower') 
*使用canny算子进行亚像素边缘提取
edges_color_sub_pix (Image, Edges1, 'canny', 0.5, 5, 50)
*使用canny算子进行亚像素边缘提取
edges_color_sub_pix (Image, Edges2, 'sobel_fast', 0.5, 40, 70)
Edges1, 'canny'精细滤波器, 0.5, 5, 50
Edges2, 'sobel_fast'快速计算, 0.5, 40, 70

猜你喜欢

转载自blog.csdn.net/qq_45336030/article/details/123960211