📄 regiongrow.m
字号:
function[f,g] = RegionGrow(i,j,f,g)
%f is the original image to region_grow,and g is the same size to f image
%which contains only 1 and 0.
[x,y]=size(f);
sta.StackPoint=1; %堆栈的栈顶指针
sta.Pixel.x=zeros(x*y,1); %堆栈的最大可能存储值
sta.Pixel.y=zeros(x*y,1);
sta.Pixel.x(sta.StackPoint,1)=i; %initial seed
sta.Pixel.y(sta.StackPoint,1)=j;
iCurrentPixelx=i;
iCurrentPixely=j;
g(iCurrentPixelx,iCurrentPixely)=0; %标记为0,表示此点已经生长过了
%iCurrentPixelx=i;
%iCurrentPixely=j;
while(sta.StackPoint~=0)
iCurrentPixelx=sta.Pixel.x(sta.StackPoint,1); %取出种子点
iCurrentPixely=sta.Pixel.y(sta.StackPoint,1);
sta.StackPoint=sta.StackPoint-1;
pStack=sta.StackPoint; %测试
if(iCurrentPixely>1) %向左生长
if(abs(double(f(iCurrentPixelx,iCurrentPixely))-double(f(iCurrentPixelx,iCurrentPixely-1)))<40&&g(iCurrentPixelx,iCurrentPixely-1)==1)
sta.StackPoint=sta.StackPoint+1;
sta.Pixel.x(sta.StackPoint,1)=iCurrentPixelx;
sta.Pixel.y(sta.StackPoint,1)=iCurrentPixely-1;
f(iCurrentPixelx,iCurrentPixely-1)=f(iCurrentPixelx,iCurrentPixely);
g(iCurrentPixelx,iCurrentPixely-1)=0; %标记为0,表示此点已经生长过了
iCurrentPixely=iCurrentPixely-1;
end
end
if(iCurrentPixelx>1) %向上生长
if(abs(double(f(iCurrentPixelx-1,iCurrentPixely))-double(f(iCurrentPixelx,iCurrentPixely)))<40&&g(iCurrentPixelx-1,iCurrentPixely)==1)
sta.StackPoint=sta.StackPoint+1;
sta.Pixel.x(sta.StackPoint,1)=iCurrentPixelx-1;
sta.Pixel.y(sta.StackPoint,1)=iCurrentPixely;
f(iCurrentPixelx-1,iCurrentPixely)=f(iCurrentPixelx,iCurrentPixely);
g(iCurrentPixelx-1,iCurrentPixely)=0; %标记为0,表示此点已经生长过了
iCurrentPixelx=iCurrentPixelx-1;
end
end
if(iCurrentPixely<y) %向右生长
if(abs(double(f(iCurrentPixelx,iCurrentPixely))-double(f(iCurrentPixelx,iCurrentPixely+1)))<40&&g(iCurrentPixelx,iCurrentPixely+1)==1)
sta.StackPoint=sta.StackPoint+1;
sta.Pixel.x(sta.StackPoint,1)=iCurrentPixelx;
sta.Pixel.y(sta.StackPoint,1)=iCurrentPixely+1;
f(iCurrentPixelx,iCurrentPixely+1)=f(iCurrentPixelx,iCurrentPixely);
g(iCurrentPixelx,iCurrentPixely+1)=0; %标记为0,表示此点已经生长过了
iCurrentPixely=iCurrentPixely+1;
end
end
if(iCurrentPixelx<x) %向下生长
if(abs(double(f(iCurrentPixelx,iCurrentPixely))-double(f(iCurrentPixelx+1,iCurrentPixely)))<40&&g(iCurrentPixelx+1,iCurrentPixely)==1)
sta.StackPoint=sta.StackPoint+1;
sta.Pixel.x(sta.StackPoint,1)=iCurrentPixelx+1;
sta.Pixel.y(sta.StackPoint,1)=iCurrentPixely;
f(iCurrentPixelx+1,iCurrentPixely)=f(iCurrentPixelx,iCurrentPixely);
g(iCurrentPixelx+1,iCurrentPixely)=0; %标记为0,表示此点已经生长过了
iCurrentPixelx=iCurrentPixelx+1;
end
end
end
result1=f;result2=g;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -