clear;clc
%%指纹灰度值读取及二值化
G=imread('zw2.BMP');
[m,n]=size(G);
for i=1:m
for j=1:n
if G(i,j)>150
G(i,j)=1;
else
G(i,j)=0;
end
end
end
%%细化
ls=1;
js=0;
t=1;
while(ls)
for i=2:m-2
for j=2:n-2
if G(i,j)==0
if G(i-1,j-1)+G(i-1,j)+G(i-1,j+1)==0 & G(i+1,j-1)+G(i+1,j)+G(i+1,j+1)==3
G(i,j)=1;
elseif G(i-1,j-1)+G(i,j-1)+G(i+1,j-1)==0 & G(i-1,j+1)+G(i,j+1)+G(i+1,j+1)==3
G(i,j)=1;
elseif G(i-1,j-1)+G(i-1,j)+G(i-1,j+1)==3 & G(i+1,j-1)+G(i+1,j)+G(i+1,j+1)==0
G(i,j)=1;
elseif G(i-1,j-1)+G(i,j-1)+G(i+1,j-1)==3 & G(i-1,j+1)+G(i,j+1)+G(i+1,j+1)==0
G(i,j)=1;
elseif G(i-1,j)+G(i-1,j+1)+G(i,j+1)==0 & G(i,j-1)+G(i+1,j)==2
G(i,j)=1;
elseif G(i-1,j)+G(i-1,j-1)+G(i,j-1)==0 & G(i,j+1)+G(i+1,j)==2
G(i,j)=1;
elseif G(i,j-1)+G(i+1,j-1)+G(i+1,j)==0 & G(i,j+1)+G(i-1,j)==2
G(i,j)=1;
elseif G(i,j+1)+G(i+1,j+1)+G(i+1,j)==0 & G(i,j-1)+G(i-1,j)==2
G(i,j)=1;
elseif (G(i,j-1)+G(i-1,j+2)+G(i,j+2)+G(i+1,j+2)==0 & G(i,j+1)+G(i-1,j)+G(i+1,j)==3) | (G(i,j-1)+G(i-1,j+1)+G(i-1,j+2)+G(i,j+2)==0 & G(i,j+1)+G(i+1,j+1)==2) | (G(i,j-1)+G(i,j+2)+G(i+1,j+1)+G(i+1,j+2)==0 & G(i,j+1)+G(i-1,j+1)==2) | (G(i-1,j)+G(i+2,j+1)+G(i+2,j)+G(i+2,j-1)==0 & G(i,j+1)+G(i+1,j)+G(i+1,j-1)==3) | (G(i-1,j)+G(i+1,j+1)+G(i+2,j+1)+G(i+2,j)==0 & G(i+1,j)+G(i+1,j-1)==2) | (G(i-1,j)+G(i+1,j-1)+G(i+2,j-1)+G(i+2,j)==0 & G(i+1,j)+G(i+1,j+1))
G(i,j)=0;
elseif (G(i,j-1)+G(i-1,j)==0) | (G(i,j-1)+G(i+1,j)==0) | (G(i,j+1)+G(i-1,j)==0) | (G(i+1,j)+G(i,j+1)==0)
G(i,j)=1;
% else
% G(i,j)=1;
end
end
end
end
s=sum(sum(G));
if s==t
ls=0;
end
t=s;
js=js+1;
end
%输出细化图
for i=1:m
for j=1:n
if G(i,j)==1
G(i,j)=255;
end
end
end
imshow(G)
ls=1;
js=0;
t=1;
while(ls)
u=G;
for a=2:m-1
for b=2:n-1
if u(a,b)==0
if abs(u(a,b+1)-u(a-1,b+1))+abs(u(a-1,b+1)-u(a-1,b))+abs(u(a-1,b)-u(a-1,b-1))+abs(u(a-1,b-1)-u(a,b-1))+abs(u(a,b-1)-u(a+1,b-1))+abs(u(a+1,b-1)-u(a+1,b))+abs(u(a+1,b)-u(a+1,b+1))+abs(u(a+1,b+1)-u(a,b+1))~=1%寻找端点
if (u(a,b+1)+u(a-1,b+1)+u(a-1,b))*(u(a,b-1)+u(a+1,b-1)+u(a+1,b))+(u(a-1,b)+u(a-1,b-1)+u(a,b-1))*(u(a+1,b)+u(a+1,b+1)+u(a,b+1))==0 %去除空洞和毛刺
u(a,b)=1;
end
end
end
end
end
s=sum(sum(G));
if s==t
ls=0;
end
t=s;
js=js+1;
end
waitbar