一、Halcon针对极大值抑制有两个算子,nonmax_suppression_dir和nonmax_suppression_amp。下面分别讲解两个算子用法。
1.1 nonmax_suppression_dir(EdgeAmplitude, EdgeDirection, ImageResult, ‘nms’)
参数解释:
EdgeAmplitude 输入的振幅(梯度幅值)图像。
EdgeDirection 输入的方向图像
ImageResult 输出的结果图
下面是两种算法模式
‘nms’ 是指检测图像中每个点的灰度值是否为垂直于其方向的局部最大值。在这种模式下,只检查最接近给定方向的两个邻域。如果这个两个灰度值中有一个大于待测点的灰度值,则该灰度值小的那个点被抑制(即从输入区域移除),EdgeAmplitude图像中对应保留下来的最大值点的灰度值保持不变。
‘inms’ 测试的两个灰度值是由相邻的四个点插值得到的。其余的原理与‘nms’相同
1.2 nonmax_suppression_amp (EdgeAmplitude, ImageResult, ‘hvnms’)
nonmax_suppression_amp 与 nonmax_suppression_dir相反,不需要方向图像。可选择两种操作模式:
参数解释:
EdgeAmplitude 输入的振幅(梯度幅值)图像。
ImageResult 输出的结果图
下面是两种算法模式
‘hvnms’ 是指如果一个点的灰度值大于或等于在5个像素的搜索空间内的灰度值(水平或垂直),则该点被标记为局部最大值。将非最大值点从区域中去除,EdgeAmplitude图像中灰度值保持不变。
‘loc_max’ 如果一个点的灰度值大于或等于其八个相邻点的灰度值,则该点被标记为局部最大值
二、Halcon边缘检测算子
2.1配合非极大值抑制算子使用的边缘检测算子,可以输出振幅图像或方向图像。
sobel_dir (image, EdgeAmplitude, EdgeDirection, ‘sum_abs’, 3)
sobel_amp (image, EdgeAmplitude, ‘sum_abs’, 3)
edges_image (image, ImaAmp1, ImaDir1, ‘canny’, 1, ‘nms’, 20, 40)
edges_color (image, ImaAmp, ImaDir, ‘canny’, 1, ‘nms’, 20, 40)
frei_amp (image, ImageEdgeAmp)
frei_dir (image, ImageEdgeAmp1, ImageEdgeDir)
kirsch_amp (image, ImageEdgeAmp)
kirsch_dir (image, ImageEdgeAmp1, ImageEdgeDir)
prewitt_amp (image, ImageEdgeAmp)
prewitt_dir (image, ImageEdgeAmp1, ImageEdgeDir)
robinson_amp (image, ImageEdgeAmp)
robinson_dir (image, ImageEdgeAmp1, ImageEdgeDir)
roberts (image, ImageEdgeAmp, ‘gradient_sum’)
2.2直接输出亚像素轮廓的边缘检测算子,不与非极大值抑制算子一起使用。
edges_sub_pix (image, Edges1, ‘canny’, 1, 20, 40)
edges_color_sub_pix (ImaAmp, Edges, ‘canny’, 1, 20, 40)
2.3以下两个算子使用的时候可以自带非极大值抑制nms,也可以选择none
edges_image (image, ImaAmp1, ImaDir1, ‘canny’, 1, ‘nms’, 20, 40)
edges_color (image, ImaAmp, ImaDir, ‘canny’, 1, ‘nms’, 20, 40)
三、实例图像
原图
ImageEdgeAmp