结合边缘检测算子和形态学方法的图像边缘检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结合边缘检测算子和形态学方法的图像边缘检测
1 引言
图像边缘对人的视觉有很重要的意义,一般而言,当人看一个有边缘的物体时,首先感觉到的就是边缘。
需要特别指出的是,检测出的边缘并不等于实际目标的真实边缘。
由于图像数据是二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出来的边缘也不一定代表实际的边缘。
图像边缘检测,它是图像预处理与分析的重要环节之一,并广泛应用于各种领域,如目标提取与识别、遥感、图像分割、医学图像处理等。
图像的边缘是指灰度变化较为明显且剧烈(也称灰度突变)的地方,即通过灰度不连续而得到的结果,本质上也表示一个区域的结束与另外一个区域的开始。
本文列举了边缘检测从传统方法到新兴的各种方法,并对这些方法的优缺点进行了详细的分析与总结。
2 算法原理
2.1 基于梯度的边缘检测算子
在图像处理中,最常用的一阶导数的算法就是本节所讲的梯度算子。
梯度的等效形式是在二维平面上的一阶导数,对应的梯度算子的等效形式即为一阶导数算子。
图像边缘的强度用梯度的幅值来表示,与边缘走向垂直的方向即为梯度的方向。
梯度算子是一介导数算子,图像),(y x f 在位置),(y x 的梯度定义为下列向量:
[]
⎥⎥⎦
⎤
⎢⎢⎣⎡==
∂∂∂∂x
y x f y y x f f f x
y
y x grad ),(),(),(
2
2
2
2),(),(),(⎪⎪⎭
⎫
⎝⎛∂∂+⎪⎭⎫ ⎝⎛∂∂=+=y y x f x y x f f f y x grad y
x ⎪⎪⎭
⎫
⎝⎛∂∂∂∂=''=x y x f y y x f f f y x
),()
,(arctan )arctan(22
θ
以上各式的偏导数需对每个像素的位置计算,实际应用中常用小区域模板进行卷积来近似计算。
对和各用一个模板,将两个结合起来就构成一个梯度算子。
根据模板的大小和元素值的不同,已提出许多不同的算子,常见的有Roberts 算子,Sober 算子, Prewitt 算子、Laplacian 算子和LoG 算子等。
2.1.1 Roberts 算子
Roberts 边缘检测算子用图 1所示的模板近似计算图像函数),(y x f 在点).(j i 对应x 和y 的偏导数,如式(2.1.1)所示。
用此方法可以计算得到图像中所有点的偏导数。
)1,(),1(),()
,()1,1(),(+-+=-++=j i f j i f j i G j i f j i f j i G y x (2.1.1)
-1 0 0 -1 0
1
1
图1 Roberts 模板 2.1.2 Prewitt 算子
Prewitt 边缘检测算子用图2所示的3x3模板来近似计算图像函数),(y x f 在),(j i 对x 和y 的偏导数,如式(2.1.2)、式(2.1.3)所示。
在这组公式中,3x3大小的图像区域的第3行和第1行间的差近似于x 方向上的导数,第3列和第1列之差近似于y 方向上的导数。
[][]
)1,1(),1()1,1()1,1(),1()1,1(),(+-+-+---
+++++-+=j i f j i f j i f j i f j i f j i f j i G x (2.1.2)
[][]
)1,1()1,()1,1()1,1()1,()1,1(-++-+---
++++++-=j i f j i f j i f j i f j i f j i f G y (2.1.3)
-1 -1 -1 -1 0 1 0 0 0 -1 0 1 1
1
1
-1
1
图2 Prewitt 模板
2.1.3 Sober 算子
Sober 边缘检测算子用图3所示的3x3模板来近似计算图像函数),(y x f 在),(j i 对x 和y 的偏导数,如式(2.1.4)、式(2.1.5)所示。
这两个公式相对于Prewitt 算子的一个小小变化是在中心系数上使用一个权值2,权值2用于通过增加中心点的重要性而实现某种程度的平滑效果。
[][])1,1(),1(2)1,1()1,1(),1(2)1,1(),(+-+-+---
+++++-+=j i f j i f j i f j i f j i f j i f j i G x (2.1.4)
[][]
)1,1()1,(2)1,1()1,1()1,(2)1,1(-++-+---
++++++-=j i f j i f j i f j i f j i f j i f G y (2.1.5)
-1 -2 -1 -1 0 1 0 0 0 -2 0 2 1
2
1
-1
1
图3 Sober 模板
2.1.4 Laplacian 算子
拉普拉斯(Laplacian)算子定义图像),(y x f 梯度为:
222
22
y
f
x f f ∂∂+∂∂=∇ (2.1.6) 对于离散图,拉普拉斯算子为:
),(),(2
2
2y x f y x f f y x ∇+∇=∇ (2.1.7) 其中
)
,(2)1,()1,(),()1,(),(),(2),1(),1(),(),1(),(2
2
y x f y x f y x f y x f y x f y x f y x f y x f y x f y x f y x f y x f y y y x x x --++=∆-+∆=∆--++=∆-+∆=∆ (2.1.8)
因此,有
),(4)1,()1,(),1(),1(2y x f y x f y x f y x f y x f f --+++-++=∇
(2.1.9) 相当于原图像与模板⎪⎪⎪
⎭
⎫
⎝⎛-010141010的卷积。
2.2 数学形态学边缘检测
数学形态学在边缘检测预处理中主要用于去噪与二值化这两方面。
图像去噪既要尽可能地消除噪声又要能较好地保持轮廓信息。
数学形态学的基本运算包括膨胀、腐蚀、开运算、闭运算操作,主要应用于图像边缘检测中。
2.2.1 形态学的基本运算
膨胀:A 和B 是两个集合,A 被B 膨胀被定义为
})(|{φ≠⋂=⊕A B z B A z s
其中A 表示图像,B 为结构元。
膨胀使得图像变大,若图像出现局部断裂,可通过膨胀修复,选择不同的结构元对图像进行膨胀,会使得图像按不同的方式“长胖”。
选择形状和大小合适的结构元可以弥补图像中出现裂缝,但是在补齐裂缝的同时,会使原有的骨架变粗。
腐蚀:A 和B 是两个集合,A 被B 腐蚀被定义为: })(|{A B z B A z ⊆=Θ 其中A 表示图像,B 为结构元。
腐蚀使得图像缩小,结构元选择合适,常常可以用来消除图像中的某些毛刺,或将物体分开,选择不同的结构元对图像进行腐蚀,将使图像按不同方式“瘦身”,利用腐蚀变换客消除图像中的毛刺,也可用来将物体分开,但是,同时也会使图像缩小。
2.2.1 形态学的开闭运算 开运算
虽然腐蚀处理可以将粘连的目标物进行分离,膨胀处理可以将断开的目标物进行接续,
但同时都存在一个问题,就是经过腐蚀处理后,目标物的面积小于原有面积,而经过膨胀处理之后,目标物的面积大于原有面积。
开、闭运算就是为了解决这个问题而被提出的。
使用同一个结构元素对图像先腐蚀再进行膨胀的运算称为开运算。
使用结构元素B 对A 进行开运算,定义如下:
B B A B A ⊕Θ=)(
开运算通常用来消除小对象物、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
开运算通常是在需要去除小颗粒噪声,以及断开目标物之间粘连时使用。
其主要作用与腐蚀相似,与腐蚀操作相比,具有可以基本保持目标原有大小不变的优点。
闭运算
使用同一个结构元素对图像先膨胀再进行腐蚀的运算称为闭运算。
闭合的算符为∙,使用结构元素B对A进行闭运算,定义如下:
⊕
=
∙)
(
B
AΘ
B
B
A
闭运算通常用来填充目标内细小空洞,连接断开的邻近目标,平滑其边界的同时并不明显改变其面积。
3 实验结果与分析
3.1 实验思路
对一幅图像(图1,记为I),采用2个2x2模板进行Roberts算子边缘提取(记为b),采用2个3x3模板进行Prewitt算子边缘提取(记为c),采用2个3x3且权值为2
的模板,进行Sober算子边缘提取(记为d),采用1个3x3模板,进行Laplacian算子边
缘提取(记为e),分别对比b、c、d、e(即图5),分析其优缺点。
采用3x3正方形作
为结构元,对b进行形态学的开闭运算,得到g和f(图6),分析可比较g和f。
3.2 实验步骤
1.读入一幅灰度图像cr00.bmp(记为I),显示原始图像;
2.调用卷积函数使得原图像与分别与不同的矩阵模板做卷积运算,提取图像边缘,得到(b)Roberts算子,(c)Prewitt算子,(d)Sober算子,(e)Laplacian算子四幅图像。
3.以Roberts算子提取的图像边缘为例,选取3x3正方形的结构元对边缘图像进行开闭运算,比较开闭运算的结果。
3.3 实验代码
I=imread('E:\大三下学期学习资料\图像处理\标准图像\cr00.bmp');
[hj,wj]=size(I);
figure;
imshow(I);
xlabel('(a)原始图像');
hx=[1 0;0 -1]; %Roberts
hy=[0 1;-1 0];
hx2=[-1 -1 -1;0 0 0;1 1 1]; %Prewitt
hy2=[-1 0 1;-1 0 1;-1 0 1];
hx3=[-1 -2 -1;0 0 0;1 2 1]; %Sobel
hy3=[-1 0 1;-2 0 2;-1 0 1];
hx4=[0 1 0;1 -4 1;0 1 0]; %Laplacian
I1=conv2(I,hx);
I1=conv2(I1,hy);
figure;
subplot(2,2,1);
imshow(I1,[]);
xlabel('(b)Roberts算子');
I2=conv2(I,hx2);
I2=conv2(I2,hy2);
subplot(2,2,2);
imshow(I2,[]);
xlabel('(c)Prewitt算子');
I3=conv2(I,hx3);
I3=conv2(I3,hy3);
subplot(2,2,3);
imshow(I3,[]);
xlabel('(d)Sobel算子');
I4=conv2(I,hx4);
subplot(2,2,4);
imshow(I4,[]);
xlabel('(e)Laplacian算子');
S1=strel('square',3);
C1=imopen(I1,S1);
C2=imclose(I1,S1);
figure;
subplot(1,2,1);
imshow(C1);title('结构元为3x3方形')
xlabel('(f)开运算');
subplot(1,2,2);
imshow(C2);title('结构元为3x3方形')
xlabel('(g)闭运算');
3.4 实验结果分析
(1)根据上述步骤进行实验,得到实验结果如图4、5、6所示。
图 4
图 5
图 6
(2)根据图5进行分析得:
(a)Sobel算子和Prewitt算子,他们都是对图像先做加权平滑处理,然后再做微分运算,所不同的是平滑部分的权值有些差异,因此它们对噪声有一定的抑制能力。
Sobel算子比Prewitt算子在噪声抑制方面略胜一筹,但不能完全排除检测结果中出现虚假边缘,虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度;
(b)Roberts算子利用局部差分算子寻找边缘,检测水平和垂直方向边缘的性能好于斜线方向,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没有经过平滑处理,因此不具备抑制噪音功能,该算子对具有陡峭边缘且噪音少的图像效果好;
(c)Laplacian是二阶微分算子,对图像中的阶跃性边缘点定位准确,获得的边界比较细致,包含了较多的细节信息,但所反映的边界不太清晰,对噪声非常敏感,易丢失一部分边缘方向信息,造成一些不连续的检测边缘。
(3)根据图6进行分析得:
开闭两种运算都可以去除比结构元素小的特定图像细节,同时保证不产生全局的几
何失真。
开启运算可以把比结构元素小的椒盐噪声滤除,切断细长搭接而起到分离作用。
闭合运算可使比结构元素小的缺口或孔填补上,搭接短的间断而起到连通作用
4.总结
综上所述,得到如下结论:
(1)基于边缘的梯度算子产生的边缘图像具有一定的相似性。
有一点值得特别说明的是
拉普拉斯(Laplacian)算子与原图像做卷积运算时,运算结果可能出现负值,需要再进行
防治溢出(灰度值大于255或小于0)处理。
(2)开运算一般使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。
闭运算同
样是轮廓变得更光滑,但与开运算相反的是,它通常消弭狭窄的间断和长细的鸿沟,消
除小的孔洞,并填补轮廓线中的断裂。
(3)在边缘检测中,边缘定位能力和抑噪能力是一对矛盾体,有的算法边缘定位能力比
较强,有的抑噪能力比较好。
因此,每种算子都具有各自的优缺点,不能笼统地说哪一
种算子好,哪一种算子不好。
5.参考文献
[1] 杨杰. 数字图像处理及MATLAB实现. 北京:电子工业出版社,2010.2。