检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。图像边缘检测必须满足两个条件:一是必须能有效地抑制噪声;二是必须尽量精确确定边缘的位置。既要提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感。

1.Canny边缘检测基本原理:

(1)具有既能滤去噪声又保持边缘特性的边缘检测最优滤波器,其采用一阶微分滤波器。采用二维高斯函数的任意方向上的一阶方向导数为噪声滤波器,通过与图像卷积进行滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。

(2)类似与Marr(LOG)边缘检测方法,也属于先平滑后求导数的方法。

2.Canny边缘检测算法

step1:用高斯滤波器平滑图象;

step2:用一阶偏导的有限差分来计算梯度的幅值和方向;

step3:对梯度幅值进行非极大值抑制;

step4:用双阈值算法检测和连接边缘。

其数学描述如下:





但问题是如何选取阈值?

解决方法:双阈值算法进行边缘判别和连接边缘。

①首先是边缘判别:凡是边缘强度大于高阈值的一定是边缘点;凡是边缘强度小于低阈值的一定不是边缘点;如果边缘强度大于低阈值又小于高阈值,则看这个像素的邻接像素中有没有超过高阈值的边缘点,如果有,它就是边缘点,如果没有,它就不是边缘点。

②其次是连接边缘:双阈值算法对非极大值抑制图像作用两个阈值τ1和τ2,且2τ1≈τ2,从而可以得到两个阈值边缘图像G1(x,y)和G2(x,y)。由于G2(x,y)使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。双阈值法要在G2(x,y)中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在G1(x,y)的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在G1(x,y)中收集边缘,直到将G1(x,y)连接起来为止。

实际上,还有多种边缘点判别方法,如:将边缘的梯度分为四种:水平、竖直、45度方向、135度方向。各个方向用不同的邻接像素进行比较,以决定局部极大值。若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比并不是最大的,那么将该像素置为零,即不是边缘。

此外,在实际应用中,检测效果还与滤波模板大小有关,当时有较好的检测效果。

Canny算子检测方法的优点:①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘。

在这几种算法中除Roberts算子外都使用了图像模板,模板运算是图像的一种处理手段——邻域处理,有许多图像增强效果都可以采用模板运算实现,如平滑效果,中值滤波,油画效果,图像的凹凸效果等等。在模板运算中,首先定义一个模板,模板的大小以3*3的较常见,也有2*2, 5*5或更大尺寸的。运算时,把模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对中心像素和它周围的像素进行数学运算,算出的结果作为输出图像对应像素点的值。

这些经典的边缘提取算子,虽然各自不同,有不同的长处,但是它们也有共同的特点:每种算子对应的预定义的边缘是它们最适合使用的情形,也就是说它们有针对性。这一点在应用中是有优越性的,它们的针对性可以帮助我们完成特定的任务。同时这也是算子的局限性,对于一般的问题或者情况未知的问题,预定义边缘的方法可能不会达到最佳效果。

I=imread('lena.bmp');  imshow(I); title('原始图像'); BW1= edge(I,'Canny',0.00) ;   %edge调用Canny为检测算子判别阈值为0.00 figure,imshow(BW1); title( '阈值为0.00的Canny算子边缘检测图像 '); BW2= edge(I,'Canny',0.05) ;   %edge调用Canny为检测算子判别阈值为0.05 figure,imshow(BW2); title( '阈值为0.05的Canny算子边缘检测图像'); BW20= edge(I,'Canny',0.1) ;   %edge调用Canny为检测算子判别阈值为0.1 figure,imshow(BW20); title( '阈值为0.1的Canny算子边缘检测图像'); BW21= edge(I,'Canny',0.2) ;   %edge调用Canny为检测算子判别阈值为0.2 figure,imshow(BW21); title( '阈值为0.2的Canny算子边缘检测图像 '); BW22= edge(I,'Canny',0.3) ;   %edge调用Canny为检测算子判别阈值为0.3 figure,imshow(BW22); title( '阈值为0.3的Canny算子边缘检测图像 ');