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的元素, %在新的数组中相应的位置设置成1,其余的变成0,这样就形成了0,1 %二值图像了. imb=imgray>128; % 下面就可以调用细化函数了 imthin=zs(imb); % 显示原始图像(未细化前的图像) figure(1) imshow(imb) ; % 显示结果图像(细化后的图像) figure(2) imshow(imthin) ;
纯搬运。
参考:
1.http://hi.baidu.com/simonyuee/blog/item/a02c744e3056bc0cb3de05e8.html