第四节:像素级边缘提取&相关算子
含义:就是颜色边缘提取。颜色边缘检测方法是使用边缘滤波器,这些滤波器通过寻找较亮和较暗的区域边界像素点的方式提取边缘,滤波器寻找图像中梯度变化明显的部分。这些梯度一般描述为边缘的振幅和方向。将边缘振幅高的所有像素选择出来,就完成了区域的边缘轮廓提取。对比上述3种算子,有如下总结。
1、边缘检测的一般流程
①获取图像。
②选择感兴趣区域。这是为了减少计算量,加快计算速度。
③图像滤波。对输入图像使用边缘滤波器是采集后的一个关键步骤,为了获取图像的边缘部分,在读取了输入图像后,可以使用边缘滤波器获取边缘的梯度和方向。
④提取边缘。将符合条件的边缘提取出来,应用滤波器之后,可以使用阈值处理将图像中的高亮边缘提取出来。而后可以用threshold减少非关键边缘,skeleton绘制边缘。
⑤边缘处理。根据检测的需要对提取出的边缘进行处理,有时得到的边缘可能会比较粗略,往往大于一个像素,需要进行一些细化;有时得到的边缘并不连续,因此还需要对边缘做一些处理,如生成轮廓、合并非连续的边缘、分离背景等。
⑥显示结果。
2、常用的边缘提取算子
①Sobel算子
使用Sobel算子检测边缘幅度(梯度幅值) sobel_amp(Image : EdgeAmplitude : FilterType, Size : ) Image:输入参数,输入单通道图像。 EdgeAmplitude:输出参数,带有边缘梯度的图像。 FilterType:输入参数,表示卷积核或滤波器的类型。 【 'sum_abs', 'sum_abs_binomial', 二项式滤波器 'sum_sqrt', 'sum_sqrt_binomial', 二项式滤波器 'thin_max_abs', 'thin_max_abs_binomial', 二项式滤波器 'thin_sum_abs', 'thin_sum_abs_binomial', 二项式滤波器 'x', 'y', 'x_binomial', 二项式滤波器 'y_binomial'二项式滤波器 】 Size:输入参数,滤波器尺寸。该参数值越大,得到的边缘线条会越粗,细节越少。这个值一般为单数,默认为3。【 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39】 |
使用Sobel算子检测边缘(幅值和相位) sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : ) |
read_image(Image,'data/flower')
rgb1_to_gray (Image, GrayImage)
sobel_amp(GrayImage,Amp1,'sum_abs',3)
sobel_amp(GrayImage,Amp2,'thin_sum_abs',3)
sobel_amp(GrayImage,Amp3,'thin_max_abs',3)
sobel_amp(GrayImage,Amp4,'sum_sqrt',3)
sobel_amp(GrayImage,Amp5,'x',3)
sobel_amp(GrayImage,Amp6,'y',3)
sobel_amp(GrayImage,Amp11,'sum_abs_binomial',9)
sobel_amp(GrayImage,Amp12,'thin_sum_abs_binomial',9)
sobel_amp(GrayImage,Amp13,'thin_max_abs_binomial',9)
sobel_amp(GrayImage,Amp14,'sum_sqrt_binomial',9)
sobel_amp(GrayImage,Amp15,'x_binomial',9)
sobel_amp(GrayImage,Amp16,'y_binomial',9)














Sobel算子在边缘检测的同时尽量减少了噪声的影响,比较容易实现。它对像素位置的影响进行了加权,因此效果比较好,是很常用的边缘检测方法。
Laplace算子是一种各向同性算子,比较适用于只关心边缘的位置而不考虑其周围像素的灰度差值的情况。Laplace算子对孤立像素的响应要比对边缘或线的响应更强烈,因此只适用于无噪声图像。存在噪声的情况下,使用Laplace算子进行边缘检测之前需要先进行低通滤波处理。
Canny算子是目前理论上相对最完善的一种边缘检测算法,但其也存在不足之处。为了得到较好的边缘检测结果,它通常需要使用较大的滤波尺度,这样容易丢失一些细节。
参考文献:
杨青—《Halcon机器视觉算法原理与编程实战》