实验2 图像分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二、图像分割
一、实验目的
1、使学生通过实验体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响;
2、使用MatLab 软件进行图像的分割;
3、能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能;
4、能够掌握分割条件(阈值等)的选择;
5、完成规定图像的处理并要求正确评价处理结果,能够从理论上作出合理的解释。
二、实验原理
1、边缘检测
(1)使用Roberts 算子的图像分割实验,调入并显示一幅图像*.gif或*.tif;使用Roberts 算子对图像进行边缘检测处理;Roberts 算子为一对模板,相应的矩阵为:
rh = [0 1;-1 0]; rv = [1 0;0 -1];
这里的rh 为水平Roberts 算子,rv为垂直Roberts 算子。可以显示处理后的水平边界和垂直边界检测结果;用“欧几里德距离”方式计算梯度的模,显示检测结果;对于检测结果进行二值化处理,并显示处理结果。
(2)使用Prewitt 算子的图像分割实验
使用Prewitt 算子进行内容(1)中的全部步骤。
(3)使用Sobel 算子的图像分割实验
使用Sobel 算子进行内容(1)中的全部步骤。
(4)使用Canny算子进行图像分割实验。
(5) 使用拉普拉斯算子进行图像分割实验。
2、灰度阀值分割
(1)单阈值分割图像
先将一幅彩色图像转换为灰度图像,显示其直方图,参考直方图中灰度的分布,尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。
给图像加上零均值的高斯噪声(imnoise)重复上述过程,注意阈值的选择。
(2)多阈值分割图像
观察下列图像,对图1进行多阈值分割,使其分割结果如图2所示。注意阈值的选择。
图1 图2
三、实验步骤
1、打开计算机,启动MATLAB程序;
2、调入数字图像,并进行图像分割处理;
3、记录和整理实验报告。
四、实验仪器
1、计算机;
2、MATLAB等程序;
五、实验报告内容
1、叙述实验过程;
2、提交实验的原始图像和结果图像。
六、思考题
1 、评价Roberts 算子、Prewitt 算子、Sobel 算子对于噪声条件下边界检测的性能。
2、实验中所使用的四种算子所得到的边界有什么异同?
I=imread('blood1.BMP');
imshow(I);
BW1=edge(I,'roberts'); BW2=edge(I,'prewitt'); BW3=edge(I,'sobel'); BW4=edge(I,'log'); BW5=edge(I,'canny'); figure,imshow(BW1,[]); figure,imshow(BW2,[]); figure,imshow(BW3,[]); figure,imshow(BW4,[]); figure,imshow(BW5,[]);
I=imread('rice.bmp');
subplot(131);imshow(I); subplot(132);imhist(I);
T=110;
S=size(I);
[maxI,maxP]=max(I(:,:)) [minI,minP]=min(I(:,:))
for i=1:S(1)
for j=1:S(2)
if I(i,j)>=T I(i,j)=255;
else I(i,j)=0;
end
end
end
subplot(133);imshow(I);
clc;
I=imread('rice.bmp');
I=im2double(I);
figure,imshow(I),title('原图');
se=strel('disk',10);
ft=imtophat(I,se);
Th=graythresh(ft);
Th
G=im2bw(ft,Th);
figure,imshow(G),title('局部阈值');
A=imread('D:\blood.bmp');
a=A;
subplot(141);
imshow(a);
subplot(142);
imhist(a);
T=110;
s=size(a);
for i=1:s(1);
for j=1:s(2);
if a(i,j)>=T
a(i,j)=255;
else a(i,j)=0;
end
end
end
subplot(143);
imshow(a);
b=imnoise(A,'gaussian',0,0.002);
T1=100;
for i=1:s1(1);
for j=1:s1(2);
if b(i,j)>=T1
b(i,j)=255;
else b(i,j)=0;
end
end
end
subplot(144);
imshow(b);