简单区域扩张法实施图像的区域分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6、采用简单区域扩张法对下图实施图像的区域分割。自行选定起始种子像素灰及灰度间隔度。
原理:以图像的某个像素为生长点,比较相邻像素的特征,将特征相似的相邻像素合并为同一区域;以合并的像素为生长点,继续重复以上操作,最终形成具有相似特征的像素的最大连通集合。该法称简单(单一型)区域扩张法。
基于区域灰度差的方法主要有如下步骤:
(1)对图像进行逐行扫描,找出尚没有归属的像素;
(2)以该像素为中心检查它的邻域像素,如果灰度差小于预先确定的阈值,将它们合并;
(3)以新合并的像素为中心,重复步骤(2),检查新像素的邻域,直到区域不能进一步扩张;
(4)返回到步骤(1),继续扫描直到不能发现没有归属的像素,则结束整个生长过程。
下图给出已知种子点进行区域生长的一个示例。图(a)给出需分割的图像,设已知种子像素(标为灰色方块),现要进行区域生长。设这里采用的生长判断准则是:如果所考虑的像素与种子像素灰度值差的绝对值小于某个门限T,则将该像素包括进种子像素所在区域。图(b)给出T=3时的区域生长结果,整幅图被较好地分成2个区域;图(c)给出T=2时的区域生长结果,有些像素无法判定;图(d)给出T=6时的区域生长结果,整幅图都被分在一个区域中了。
程序为:(一)
I=imread('p5-06.tif');
subplot(2,2,1),imshow(I),title('原始图像');
Ic=imcomplement(I) ;
BW=im2bw(Ic,graythresh(Ic)) ;
subplot(2,2,2),imshow(BW),title('阈值截取分割后图像');
se=strel('disk',6);
BWc=imclose(BW,se);
BWco=imopen(BWc,se);
subplot(2,2,3),imshow(BWco),title('对小图像进行删除后图像');
mask=BW&BWco;
subplot(2,2,4),imshow(mask),title( '检测结果的图像');
运行结果为:
程序为:(二)
A=imread('p5-06.tif');%读入图像
seed=[100,220];%选择起始位置
thresh=15;%相似性选择阈值
A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]); A=double(A); %将图像灰度化
B=A;%将A赋予B
[r,c]=size(B); %图像尺寸 r为行数,c为列数
n=r*c;%计算图像所包含点的个数
pixel_seed=A(seed(1),seed(2));%原图起始点灰度值
q=[seed(1) seed(2)];%q用来装载起始位置
top=1;%循环判断flag
M=zeros(r,c);%建立一个与原图形同等大小的矩阵
M(seed(1),seed(2))=1;%将起始点赋为1,其余为0
count=1;%计数器
while top~=0%循环结束条件
r1=q(1,1);%起始点行位置
c1=q(1,2);%起始点列位置
p=A(r1,c1);%起始点灰度值
dge=0;
for i=-1:1%周围点的循环判断
for j=-1:1
if r1+i<=r & r1+i>0 & c1+j<=c & c1+j>0%保证在点周围范围之内
if abs(A(r1+i,c1+j)-p)<=thresh & M(r1+i,c1+j)~=1%判定条件?
top=top+1;%满足判定条件top加1,top为多少,则q的行数有多少行 q(top,:)=[r1+i c1+j];
%将满足判定条件的周围点的位置赋予q,q记载了满足判定的每一外点 M(r1+i,c1+j)=1;%满足判定条件将M中相对应的点赋为1
count=count+1;%统计满足判定条件的点个数,其实与top此时的值一样 B(r1+i,c1+j)=1;%满足判定条件将B中相对应的点赋为1
end
if M(r1+i,c1+j)==0;
%如果M中相对应点的值为0将dge赋为1,也是说这几个点不满足条件
dge=1;%将dge赋为1
end
else
dge=1;%点在图像外将dge赋为1
end
end
end %此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,
%满足条件dge为0
if dge~=1%最后判断的周围点(i=1,j=1)是否满足条件,如dge=0,满足。dge=1,不满足。 B(r1,c1)=A(seed(1),seed(2));%将原图像起始位置灰度值赋予B
end
if count>=n%如果满足判定条件的点个数大于等于n
top=1;
end
q=q(2:top,:);
top=top-1;
end
subplot(1,2,1),imshow(A,[]);
subplot(1,2,2),imshow(B,[]);
运行结果为: