canny算子,它是 最优的阶梯形边缘(step edge)检测算子。从以下三个标准来说,canny便于检测算子对受到白噪声影响的阶越型边缘是最优的。
1)检测标准。不丢失重要的边缘,不应有虚假的边缘。
2)定位标准。实际边缘与检测到的边缘位置之间的偏差最小。
3)单相应标准。将多个相应降低为单个边缘相应。
其实现步骤:
1)首先用2D高斯滤波模板与原始图像进行卷积,以消除噪声。
2)利用 导数算子(Prewitt/Sobel算子)找到图像灰度沿着两个方向的导数Gx,Gy,并求出梯度的大小。
3)利用2)的结果算出梯度方向。
4)求出了边缘的方向,就可以把边缘的梯度方向大致分为4种(水平、垂直、45度方向和135度方向),并可以找到这个像素梯度方向的邻接像素。
5)遍历图像。若摸个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大的,那么将这个像素值置为0,即不是边缘。
6)使用累计直方图计算两个阈值。凡是大于高阈值的一定是边缘;凡是小于低阈值的一定不是边缘。如果检测到结果在两个阈值之间,则根据这个像素的邻接像素中没有超过高阈值的边缘像素,如果有,则他就是边缘,否则不是。
canny算子边缘检测的MATLAB程序很简单:
I=imread('rice.tif');
BW=edge(I,'canny');
imshow(BW)