• 大小: 10KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签: MATLAB  GAC  

资源简介

用MATLAB实现GAC模型来分割图像,里面有注释 可以看懂可以运行

资源截图

代码片段和文件信息

function newim = createimage( imuFlag )
%%% 子函数:createimage()实现当前零水平集(演化曲线)在原图上的显示
%%%         和嵌入函数u的重新初始化
%%% 参数说明:
%%% im     - 原始图像
%%% u      - 当前水平集函数
%%% Flag   - 是否进行重新初始化的标志,0:否;1:是
%%% newim  - 返回的当前零水平集(红色曲线)叠加在原图上的新图像

[nnynnx]=size(im);
curvIndex=zeros(5*nnx*nny2);
curvImag=zeros([nnynnx]);
num=0;
%%- 标记当前零水平集
for i = 2 : nnx - 1
    for j = 2 : nny - 1
        if u(ij)<0  & (u(i+1j)>0 | u(i-1j)>0 | u(ij+1)>0 | u(ij-1)>0)
            num=num+1; curvIndex(num1)=i;curvIndex(num2)=j;
            curvImag(ij)=255;
        end
    end
end
%%- 在原图上显示当前零水平集
tempim = im;
tempim(curvImag>0) = 255;
newim( : : 1 ) = tempim;
tempim(curvImag>0) = 0;
newim( : : 2 ) = tempim;
newim( : : 3 ) = tempim;
newim = uint8( newim );

%%- 如果Flag=1,则重新初始化u
if Flag
    new_u = zeros(nnxnny);
    dist=zeros(1num);
    for j=1:nny
        for i=1:nnx
            for k=1:num
                dist(k)=sqrt((i-curvIndex(k1)).^2+(j-curvIndex(k2)).^2);
            end
            new_u(ij)=min(dist);
            if u(ij)<0
                new_u(ij)=-new_u(ij);
            end
        end
    end
    u=new_u;
end


评论

共有 条评论