关于区域生长法网上已经有很多算法可以实现了,但是关于多点区域生长法却没什么资料,多点可以很大程度上增加生长速度,经过琢磨才发现在单点区域生长的算法上很容易就能实现多点生长,因此写出来供大家参考。
I=imread(‘文件路径’); 先读入图像
[hang,lie] = size(I);
I=double(I);
rongcha=20; %此处可以自己指定容差范围,即阈值
[y0,x0] = getpts; %getpts函数本身就可以获得多个点,并返回多个点的坐标
x0 = round(x0);
y0 = round(y0);
R = zeros(hang,lie);
R = uint8(R); %作为检测区域是否满足区域生长条件的判断矩阵
ii=length(x0);
for k=1:ii
seed(k)=I(x0(k),y0(k));
R(x0(k),y0(k))=255; %把选定的点作为起始点
end
avr=mean(seed);
totalnum=ii; %计算生长区域内像素点的个数,此处为初始化
msum=sum(seed); %计算生长区域内像素的总和,此处为初始化
count=1;
while count>0
count=0;
for i=1:hang
for j=1:lie
if R(i,j)==255
if i>1&&i<hang&&j>1&&j<lie %图像边界判断
for u=-1:1
for v=-1:1
if R(i+u,j+v)==0&&abs(I(i+u,j+v)-avr)<=rongcha
R(i+u,j+v)=255;
count=1;
totalnum=totalnum+1;
msum=msum+I(i+u,j+v);
end
end
end
end
end
end
end
avr=msum/totalnum;
end
[hang,lie] = size(I);
I=double(I);
rongcha=20; %此处可以自己指定容差范围,即阈值
[y0,x0] = getpts; %getpts函数本身就可以获得多个点,并返回多个点的坐标
x0 = round(x0);
y0 = round(y0);
R = zeros(hang,lie);
R = uint8(R); %作为检测区域是否满足区域生长条件的判断矩阵
ii=length(x0);
for k=1:ii
seed(k)=I(x0(k),y0(k));
R(x0(k),y0(k))=255; %把选定的点作为起始点
end
avr=mean(seed);
totalnum=ii; %计算生长区域内像素点的个数,此处为初始化
msum=sum(seed); %计算生长区域内像素的总和,此处为初始化
count=1;
while count>0
count=0;
for i=1:hang
for j=1:lie
if R(i,j)==255
if i>1&&i<hang&&j>1&&j<lie %图像边界判断
for u=-1:1
for v=-1:1
if R(i+u,j+v)==0&&abs(I(i+u,j+v)-avr)<=rongcha
R(i+u,j+v)=255;
count=1;
totalnum=totalnum+1;
msum=msum+I(i+u,j+v);
end
end
end
end
end
end
end
avr=msum/totalnum;
end