好的边沿检测器,常用的5×5模板的高斯--拉普拉斯算子如图2.7所示:
-2 -4 -4 -4 -2 -4 0 8 0 -4 -4 8 2 8 -4 -2 -4 -4 -4 -2 0 0 -1 0 0 0 -1 -2 -1 0 -1 -2 16 -2 -1 0 0 -1 0 0 图2.7 高斯—拉普拉斯算子
高斯--拉普拉斯算子把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来,先平化掉噪声,再进行边缘检测,所以效果更好。 2.3.6 Canny边缘算子
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值
的像素点。图像边缘检测必须满足两个条件:一是必须能有效地抑制噪声;二是必须尽量精确确定边缘的位置。既要提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感。 1.Canny边缘检测基本原理:
(1)具有既能滤去噪声又保持边缘特性的边缘检测最优滤波器,其采用一阶微分滤波器。采用二维高斯函数的任意方向上的一阶方向导数为噪声滤波器,通过与图像卷积进行滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。
(2)类似与Marr(LOG)边缘检测方法,也属于先平滑后求导数的方法。
2.Canny边缘检测算法:
step1:用高斯滤波器平滑图象;
step2:用一阶偏导的有限差分来计算梯度的幅值和方向; step3:对梯度幅值进行非极大值抑制; step4:用双阈值算法检测和连接边缘。
16
其数学描述如下: step1:
二维为高斯函数为:
G(x,y)=
12??2?x2?y2exp???2?2?????
??在某一方向n上是G(x,y)的一阶方向导数为:
Gn=
?G= n▽G ?n????cos?????Gn=? =????sin?????G??x? G?y??式中:n式方向矢量,▽G是梯度矢量。
将图像f(x,y)与Gn作卷积,同时改变n的方向,Gn*f(x,y)取得最大值时的n就是正交于检测边缘的方向。
step2:
EX=
A(x,y)=
?G?G*f(x,y) , Ey=*f(x,y) ?x?yEX2?EY2 ??Arctan???EX?EY??? ??是图像(x,y)点处的法A(x,y)反映了图像(x,y)点处的边缘强度,
向矢量。
step3:
仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。(non-MaxiMa suppression,NMS)
解决方法:利用梯度的方向。
图示--非极大值抑制
17
四个扇区的标号为0到3,对应3*3邻域的四种可能组合。在每一点上,邻域的中心像素M与沿着梯度线的两个像素相比。如果M的梯度值不比沿梯度线的两个相邻像素梯度值大,则令M=0。
step4:
减少假边缘段数量的典型方法是对G(x,y)使用一个阈值。将低于阈值的所有值赋零值。但问题是如何选取阈值?
解决方法:双阈值算法进行边缘判别和连接边缘。
①首先是边缘判别: 凡是边缘强度大于高阈值的一定是边缘点;凡是边缘强度小于低阈值的一定不是边缘点;如果边缘强度大于低阈值又小于高阈值,则看这个像素的邻接像素中有没有超过高阈值的边缘点,如果有,它就是边缘点,如果没有,它就不是边缘点。
②其次是连接边缘: 双阈值算法对非极大值抑制图像作用两个阈值τ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度方向。各个方向用不同的邻接像素进行比较,以决定局部极大值。若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比并不是最大的,那么将该像素置为零,即不是边缘。
此外,在实际应用中,检测效果还与滤波模板大小有关,当
N?b2??1时有较好的检测效果。
Canny算子检测方法的优点:①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘。
在这几种算法中除Roberts算子外都使用了图像模板,模板运算是图像的一种处理手段——邻域处理,有许多图像增强效果都可以采用模板运算实现,如平滑效果,中值滤波,油画效果,图像的凹凸效
18
果等等。在模板运算中,首先定义一个模板,模板的大小以3*3的较常见,也有2*2, 5*5或更大尺寸的。运算时,把模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对中心像素和它周围的像素进行数学运算,算出的结果作为输出图像对应像素点的值。
这些经典的边缘提取算子,虽然各自不同,有不同的长处,但是它们也有共同的特点:每种算子对应的预定义的边缘是它们最适合使用的情形,也就是说它们有针对性。这一点在应用中是有优越性的,它们的针对性可以帮助我们完成特定的任务。同时这也是算子的局限性,对于一般的问题或者情况未知的问题,预定义边缘的方法可能不会达到最佳效果。
第3章 算法的选择和实现
近年来,图像分析和处理紧紧围绕理论、实现、应用三方面迅速发展起来。它以众多的学科领域为理论基础,其成果又渗透到众多的学科中,成为理论实践并重,在高新技术领域中占有重要地位的新兴学科。迄今已有许多边缘检测方法,其中Robert算子、Sobel 算子、Prewitt 算子、Laplace 算子、Prewitt算子、Krisdl算子、Canny算子、Gauss边缘检测算子及轮廓提取或轮廓跟踪、利用平滑技术提取图像边缘、利用差分技术提取图像边缘、利用小波分析技术提取图像边缘等方法是常用的方法,但各种算法结果差异很大。
因此,在这一章中,我们将选取两种经典、具有代表性的图像边缘检测与提取算法:一阶微分算子——Canny算子算法和二阶微分算子——高斯-拉普拉斯算子算法,用Matlab语言分别进行编程实现效果。并且这两种算法的效果也是较好的,原因如下: 3.1 坎尼(Canny)算法
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。而canny算子边缘检测算法则是既能滤去噪声又保持边缘特性的边缘检测的一阶微分算法中的最佳选择方法。其Matlab程
19
序编写如下:(第一部分图)
I=imread('lena.bmp'); imshow(I); title('原始图像');
BW1= edge(I,'Canny',0.00) ; íge调用Canny为检测算子判别阈值为0.00
figure,imshow(BW1);
title( '阈值为0.00的Canny算子边缘检测图像 ');
BW2= edge(I,'Canny',0.05) ; íge调用Canny为检测算子判别阈值为0.05
figure,imshow(BW2);
title( '阈值为0.05的Canny算子边缘检测图像');
BW20= edge(I,'Canny',0.1) ; íge调用Canny为检测算子判别阈值为0.1
figure,imshow(BW20);
title( '阈值为0.1的Canny算子边缘检测图像');
BW21= edge(I,'Canny',0.2) ; íge调用Canny为检测算子判别阈值为0.2
figure,imshow(BW21);
title( '阈值为0.2的Canny算子边缘检测图像 ');
BW22= edge(I,'Canny',0.3) ; íge调用Canny为检测算子判别阈值为0.3
figure,imshow(BW22);
title( '阈值为0.3的Canny算子边缘检测图像 '); (第二部分图)
I=imread('lena.bmp'); imshow(I); title('原始图像');
BW1= edge(I,'Canny',0.01) ; íge调用Canny为检测算子判别阈值为0.01
figure,imshow(BW1);
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于matlab的边缘检测(4)在线全文阅读。
相关推荐: