简单区域扩张法实施图像的区域分割

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,[]);

运行结果为:

相关文档
最新文档