matlab练习程序(zs图像细化)

zseven.m

function out=zseven(nbhd)
    s=sum(nbhd(:))-nbhd(5);
    temp1=(2<=s)&(s<=6);
    p=[nbhd(1) nbhd(4) nbhd(7) nbhd(8) nbhd(9) nbhd(6) nbhd(3) nbhd(2)];
    pp=[p(2:8) p(1)];
    xp=sum((1-p).*pp);
    temp2=(xp==1);
    prod1=nbhd(4)*nbhd(8)*nbhd(2);
    prod2=nbhd(4)*nbhd(6)*nbhd(2);
    temp3=(prod1==0)&(prod2==0);
    if temp1&temp2&temp3&nbhd(5)==1
         out=0;
    else
        out=nbhd(5);
    end;

zsodd.m

function out=zsodd(nbhd)
    s=sum(nbhd(:))-nbhd(5);
    temp1=(2<=s)&(s<=6);
    p=[nbhd(1) nbhd(4) nbhd(7) nbhd(8) nbhd(9) nbhd(6) nbhd(3) nbhd(2)];
    pp=[p(2:8) p(1)];
    xp=sum((1-p).*pp);
    temp2=(xp==1);
    prod1=nbhd(4)*nbhd(8)*nbhd(6);
    prod2=nbhd(8)*nbhd(6)*nbhd(2);
    temp3=(prod1==0)&(prod2==0);
    if temp1&temp2&temp3&nbhd(5)==1
         out=0;
    else
        out=nbhd(5);
    end;

zs.m

function out=zs(im)
%
%zs appises the Zhang-Suen skeletonization algorithm to image IM. IM must
%be binary.
%
luteven=makelut('zseven',3);
lutodd=makelut('zsodd',3);
done=0;
N=2;
last=im;
previous=applylut(last ,lutodd);
current=applylut(previous,luteven);
while done==0,
    if all(current(:)==last(:)),
        done=1;
    end
    N=N+1;
    last=previous;
    previous=current;
    if mod(N,2)==0,
        current=applylut(current,luteven);
    else
        current=applylut(current,lutodd);
    end;
end;
out=current;

main.m

% 从当前的工作文件夹中,彩色图像读入;
im=imread('simonyuming.jpg');
% 将彩色图像转换成灰度图像;
imgray=rgb2gray(im);
% 将灰度图像进行二值化处理,阈值设为128 
%这句话的意思是生成一个新的数组(图像),
%条件是:把im中的所有大于128的元素,
%在新的数组中相应的位置设置成,其余的变成,这样就形成了
%二值图像了.
imb=imgray>128; 
% 下面就可以调用细化函数了
imthin=zs(imb); 
% 显示原始图像(未细化前的图像)
figure(1)
imshow(imb) ; 
% 显示结果图像(细化后的图像)
figure(2) 
imshow(imthin) ;

纯搬运。

参考:

1.http://hi.baidu.com/simonyuee/blog/item/a02c744e3056bc0cb3de05e8.html

2.http://blog.21ic.com/user1/6014/archives/2009/62725.html

posted @ 2012-05-28 14:47  Dsp Tian  阅读(2469)  评论(0编辑  收藏  举报