⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regiongrow.m

📁 区域生长的matlab源码 region grow
💻 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 + -