实验六图像分割剖析Word文件下载.docx
《实验六图像分割剖析Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验六图像分割剖析Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
使用Roberts算子对图像进行边缘检测处理;
Roberts算子为一对模板:
-1
1
(a)450方向模板(b)1350方向模板
图1matlab2010的Roberts算子模板
相应的矩阵为:
rh=[01;
-10];
rv=[10;
0-1];
这里的rh为45度Roberts算子,rv为135度Roberts算子。
分别显示处理后的45度方向和135方向的边界检测结果;
用“欧几里德距离”和“街区距离”方式计算梯度的模,并显示检测结果;
对于检测结果进行二值化处理,并显示处理结果。
提示:
先做检测结果的直方图,参考直方图中灰度的分布尝试确定阈值;
应反复调节阈值的大小,直至二值化的效果最为满意为止。
(2)使用Prewitt算子的图像分割实验
(a)水平模型(b)垂直模板
图2.Prewitt算子模板
使用Prewitt算子进行内容
(1)中的全部步骤。
(3)使用Sobel算子的图像分割实验
使用Sobel算子进行内容
(1)中的全部步骤。
-2
2
图3.Sobel算子模板
(4)使用LoG(拉普拉斯-高斯)算子的图像分割实验
使用LoG(拉普拉斯-高斯)算子进行内容
(1)中的全部步骤。
提示1:
处理后可以直接显示处理结果,无须另外计算梯度的模。
提示2:
注意调节噪声的强度以及LoG(拉普拉斯-高斯)算子的参数,观察处理结果。
(5)打印全部结果并进行讨论。
下面是使用sobel算子对图像进行分割的MATLAB程序
f=imread('
room.tif'
);
[gv,t1]=edge(f,'
sobel'
'
vertical'
%使用edge函数对图像f提取垂直边缘
imshow(gv)
[gb,t2]=edge(f,'
horizontal'
%使用edge函数对图像f提取水平边缘
figure,imshow(gb)
w45=[-2-10;
-101;
012];
%指定模版使用imfilter计算45度方向的边缘
g45=imfilter(double(f),w45,'
replicate'
T=0.3*max(abs(g45(:
)));
%设定阈值
g45=g45>
=T;
%进行阈值处理
figure,imshow(g45);
在函数中使用'
prewitt'
和'
roberts'
的过程,类似于使用sobel边缘检测器的过程。
三、实验结果及结果分析
实验结果:
图4.Roberts算子的图像分割
实验结果分析:
Roberts算子利用局部差分算子寻找边缘,边缘定位精度比较高,但容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备抑制噪声能力。
该算子对具有陡峭边缘且噪声少的图像效果较好。
(2)使用Prewitt算子的图像分割实验
图5.Prewitt算子的图像分割
Prewitt算子先对图像做加权平滑处理,然后再做微分运算,所不同的是平滑部分的权值有些差异,因此它们对噪声有一定的抑制能力。
图6.Sobel算子的图像分割
Sobel算子和Prewitt算子一样,都是先对图像做加权平滑处理,然后再做微分运算,因此它们对噪声有一定的抑制能力。
比较实验结果可以发现,Sobel算子比Prewitt算子在噪声抑制方面略胜一筹,但不能排除检测结果中出现的虚假边缘。
虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素的宽度。
图7.LoG(拉普拉斯-高斯)算子的图像分割
拉普拉斯算子,它是无方向的二阶微分算子,对图像中的阶跃型边缘定位准确,该算子对噪声非常敏感,它使噪声成分得到加强。
这两个特性使得该算子容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘。
LoG算子,该算子克服了拉普拉斯算子抗噪声性能比较差的缺点,但是在抑制噪声的同时也可能将原有的比较尖锐的边缘平滑掉了。
使用sobel、prewitt和roberts算子对图像进行分割实验。
图8.全部结果
四、实验中遇到问题及解决方法
1.评价一下Roberts算子、Prewitt算子、Sobel算子对于噪声条件下边界检测的性能。
答:
Roberts算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘。
检测水平和垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感。
Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。
对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。
当对精度要求不是很高时,是一种较为常用的边缘检测方法。
Prewitt算子利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘。
对噪声具有平滑作用,定位精度不够高。
2.实验中所使用的四种算子所得到的边界有什么异同?
算子的存在就是对这种导数分割原理进行的实例化计算,是为了在计算过程中直接使用的一种计算单位。
Roberts算子:
边缘定位准,但是对噪声敏感。
适用于边缘明显且噪声较少的图像分割。
Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。
经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。
Prewitt算子:
对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。
Sobel算子:
Sobel算子和Prewitt算子都是加权平均,但是Sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。
一般来说,距离越远,产生的影响越小。
IsotropicSobel算子:
加权平均算子,权值反比于邻点与中心点的距离,当沿不同方向检测边缘时梯度幅度一致,就是通常所说的各向同性。
Laplacian算子:
这是二阶微分算子。
其具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。
但是,其对噪声比较敏感,所以,图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。
Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数,Laplacian算子对噪声具有无法接受的敏感性;
同时其幅值产生算边缘,这是复杂的分割不希望有的结果;
最后Laplacian算子不能检测边缘的方向;
所以Laplacian在分割中所起的作用包括:
(1)利用它的零交叉性质进行边缘定位;
(2)确定一个像素是在一条边缘暗的一面还是亮的一面;
一般使用的是高斯型拉普拉斯算子(LaplacianofaGaussian,LoG),由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。
所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;
图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。
五、实验心得体会
通过这个实验,我熟练学会了利用MatLab软件进行图像的分割。
在通过实验体会到了一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响。
在评价各主要算子在无噪声条件下和噪声条件下的分割性能下,掌握分割条件(阈值等)的选择。
完成规定图像的处理并评价处理结果。
六、源程序清单
%%
%1.使用Roberts算子的图像分割实验
I=imread('
rh=[-10;
01];
rv=[0-1;
10];
g45=imfilter(double(I),rh,'
g135=imfilter(double(I),rv,'
subplot(3,2,1);
imshow(g45,[]);
title('
g45'
subplot(322);
imshow(g135,[]);
g135'
%计算梯度模
%
(1)欧几里得距离计算梯度模
OD=sqrt(g45.^2+g135.^2);
subplot(323);
imshow(OD,[]);
(1)欧几里得距离计算梯度模'
T=0.1*max(OD(:
));
BWOD=OD>
T;
subplot(324);
imshow(BWOD);
(1)欧几里得距离计算梯度模二值化'
%
(2)街区距离计算梯度摸
JD=abs(g45)+abs(g135);
subplot(325);
imshow(JD,[]);
(2)街区距离计算梯度模'
T=0.1*max(JD(:
subplot(326);
(2)街区距离计算梯度模二值化'
%2.使用Prewitt算子的图像分割实验
rh=[-1-1-1;
000;
111];
rv=[-101;
-101];
%
(2)街区距离计算梯度模
%3.使用Sobel算子的图像分割实验
rh=[-1-2-1;
121];
-202;
%4.使用LoG(拉普拉斯-高斯)算子的图像分割实验
log'
subplot(1,3,1);
imshow(gv);
gv'
subplot(1,3,2);
imshow(gb);
gb'
subplot(1,3,3);
imshow(g45);
%5打印全部结果并进行讨论。
%使用sobel、prewitt和roberts算子对图像进行分割实验。
sobel(gv)'
sobel(gb)'
sobel(g45)'
%使用prewitt算子对图像进行分割实验。
[gv2,t3]=edge(f,'
imshow(gv2);
prewitt(gv)'
[gb2,t4]=edge(f,'
imshow(gb2);
prewitt(gb)'
prewitt(g45)'
%使用roberts算子对图像进行分割实验。
[gv3,t5]=edge(f,'
imshow(gv3);
roberts(gv)'
[gb3,t6]=edge(f,'
imshow(gb3);
roberts(gb)'
roberts(g45)'
%图像像素值的标定
subplot(121);
未标定'
cg45=(g45-min(g45(:
)))/(max(g45(:
))-min(g45(:
subplot(122);
imshow(cg45);
已标定'