实验三 图像分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三图像分割
一、实验目的
1、掌握基于边缘的分割方法:检测图像点边缘,线边缘
2、掌握基于区域的分割方法:阈值分割技术、区域生长技术、分水岭分割方法
3、用MATLAB编写程序实现上述分割方法
二、实验内容
1、点、线和边缘检测
1)点检测方法为g=abs(imfilter(double(f),w))>=T,即将图像f 用8邻域拉普拉斯模板w 进行滤波,得到滤波图像g,将图像g中大于最高灰度值一半的图像显示出来,即得到检测的点。
2)线检测方法为g=abs(imfilter(double(f),w)),即将图像f分别用,水平、垂直、+45度,-45度模板检测。
3)边缘检测方法为使用edge函数,语法BW = edge(I,‘parameter’),即用edge函数,通过实验选择一种较好的算子检测图像边缘。
要求:给出djc.m,xjc.m,byjc.m三个完整程序,给出原始图像,检测后的图像,合理排列图像,给出合理的图像title。
2、阈值分割
语法:level = graythresh(I) ,自动阈值分割。
要求:给出yzfg.m完整程序,给出原始图像,分割后的图像,合理排列图像,给出合理的图像title。
3、区域生长技术
使用函数regionGrow(见附件1),实现图像分割。
要求:给出程序各行注释;给出原始图像,分割后的图像,合理排列图像,给出合理的图像title。
4、分水岭分割方法
使用附件2代码对图像进行分割。
要求:给出程序各行注释;给出原始图像,分割后的图像,合理排列图像,给出合理的图像title。
三、实验报告内容
1、4个源程序,2个程序注释;分别实现图像分割。
2、试验中涉及的相应的图像,具体见每一项实验的“要求”。打印图像(B5纸),附在试验报告之后。
function J = regionGrow(I)
if isinteger(I)
I=im2double(I);
end
figure,imshow(I),title('Ô-ʼͼÏñ')
[M,N]=size(I);
[y,x]=getpts;
x1=round(x);
y1=round(y);
seed=I(x1,y1);
J=zeros(M,N);
J(x1,y1)=1;
sum=seed;
suit=1;
count=1;
threshold=0.15;
while count>0
s=0;
count=0;
for i=1:M
for j=1:N
if J(i,j)==1
if (i-1)>0 & (i+1)<(M+1) & (j-1)>0 & (j+1)<(N+1)
for u= -1:1
for v= -1:1
if J(i+u,j+v)==0 & abs(I(i+u,j+v)-seed)<=threshold& 1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8
J(i+u,j+v)=1;
count=count+1;
s=s+I(i+u,j+v);
end
end
end
end
end
end
end
suit=suit+count;
sum=sum+s;
seed=sum/suit;
end
f=imread('**.**'); imshow(f);
g=im2bw(f,graythresh(f)); figure,imshow(g);
gc=~g;
D=bwdist(gc);
L=watershed(~D);
w=L==0;
g2=g&~w;
figure,imshow(g2);