区域增长方法是根据同一物体区域内象素的相似性质来聚集象素点的方法,从初始区域(如小邻域或甚至于每个象素)开始,将相邻的具有同样性质的象素或其它区域归并到目前的区域中从而逐步增长区域,直至没有可以归并的点或其它小区域为止。区域内象素的相似性度量可以包括平均灰度值、纹理、颜色等信息。
区域增长方法是一种比较普遍的方法,在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图象,如自然景物。但是,区域增长方法是一种迭代的方法,空间和时间开销都比较大。
区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于1.初始点(种子点)的选取。2.生长准则。3.终止条件。区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标的提取。
A0=imread('2.png');%读取图像
seed=[1,2];%选择起始位置
thresh=15;%相似性选择阈值
A=rgb2gray(A0);%灰度化
A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);
A=double(A);%将图像灰度化
B=A;
[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;
end
else
dge=1;%在图像外将dge赋值为1
end
end
end
%此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,满足条件dge为0
if 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(121),imshow(A,[]);
subplot(122),imshow(B,[]);
区域生长一般有3个步骤。
(1)选择合适的生长点。
(2)确定相似性准则即生长准则。
(3)确定生长停止条件。
一般来说, 在无像素或者区域满足加入生长区域的条件时, 区域生长就会停止。
因为需要使用区域生长的原理,故对这个算法做一点笔记来加深对原理的理解:
1.imadjust,将处理过程中会产生overflow 和 underflow 的像素进行处理,以免处理过程中出错。
2.q记录的是可以放入生长区域的像素位置,并且在while循环中充当开头像素;
3.M矩阵主要是对dge做判断
4.A是原图像;B是分割后的图像;
5.for循环是寻找可以纳入生长圈子的像素,并使用q来记录;当dge~1的时候,将处理后的合适像素纳入分割的图像中去。