hang.m

来自「用MATLAB编写的图像伸缩变化的源码。」· M 代码 · 共 58 行

M
58
字号

RGB=imread('000000.jpg');%读图

for k=1:10
    I= double(rgb2gray(RGB));

    h = fspecial('sobel');
    gx=imfilter(I,h,'replicate'); 
    gy=imfilter(I,h,'replicate'); 

    eI=abs(gx)+abs(gy);

    Mh=eI;
    [n,m]=size(I);
    for i=1:n
        for j=2:m
                if i==1
                    Mh(i,j)=eI(i,j)+min([Mh(i,j-1),Mh(i+1,j-1)]);
                elseif i==n
                    Mh(i,j)=eI(i,j)+min([Mh(i-1,j-1),Mh(i,j-1)]);
                else
                    Mh(i,j)=eI(i,j)+min([Mh(i-1,j-1),Mh(i,j-1),Mh(i+1,j-1)]);
                end
        end
    end


    [c,I]=min([Mh(:,m)]);
    A(1,m)=I;
    for i=m-1:-1:1
        if I==1
           [c,I1]=min([Mh(I,i),Mh(I+1,i)]);
           I=I+I1-1;
        elseif I==n
           [c,I2]=min([Mh(I-1,i),Mh(I,i)]);
           I=I+I2-2;
        else
           [c,I3]=min([Mh(I-1,i),Mh(I,i),Mh(I+1,i)]);
           I=I+I3-2;
        end
        A(1,i)=I;
    end
    for i=1:m
        RGB(A(1,i),i,1)=255;
        RGB(A(1,i),i,2)=0;          
        RGB(A(1,i),i,3)=0;
    end
   imshow(RGB);
    for i=1:m
        RGB(A(1,i):n-1,i,1)=RGB(A(1,i)+1:n,i,1);
        RGB(A(1,i):n-1,i,2)=RGB(A(1,i)+1:n,i,2);
        RGB(A(1,i):n-1,i,3)=RGB(A(1,i)+1:n,i,3);
    end
    RGB=RGB(1:n-1,:,:);
    figure,imshow(RGB); 
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?