%首先要对指纹图象进行二值化
tic;
clear;
clc;
J=imread('1.bmp');
% J=~J;
%I=double(imresize(J,[512 512]));
%J=double(size(512,512));
I=double(J);
[m n]=size(I);
subplot(2,2,1),imshow(J);
title('原图像')
sum=0;
for i=1:m %求图像的总体灰度
for j=1:n
sum=sum+I(i,j);
end
end
T=sum/(m*n); %平均灰度值
for i=1:m %阈值分割
for j=1:n
if I(i,j)>T
J(i,j)=1;
else
J(i,j)=0;
end
end
end
subplot(2,2,2),imshow(J,[]);
title('阈值分割后的图像')
save erzhihua J
[len,wid]=size(J);
%细化
G=double(size(len+3,wid+3));
for i=2:(len+1)
for j=2:(wid+1)
G(i,j)=J(i-1,j-1);
end
end
for i=2:(len+1)
G(i,1)=J(i-1,1);
G(i,wid+2)=J(i-1,wid);
G(i,wid+3)=J(i-1,wid);
G(1,i)=J(1,i-1);
G(len+2,i)=J(len,i-1);
G(len+3,i)=J(len,i-1);
end
G(1,1)=J(1,1);
G(1,wid+2)=J(1,wid);
G(1,wid+3)=J(1,wid);
G(len+2,1)=J(len,1);
G(len+3,1)=J(len,1);
G(len+2,wid+2)=J(len,wid);
G(len+3,wid+3)=J(len,wid);
G(len+2,wid+3)=J(len,wid);
G(len+3,wid+2)=J(len,wid);
H=zeros(len,wid);
t=0;
while(norm(G(2:(len+1),2:(wid+1))-H)>0)
% H=G(2:513,2:513);
for i=2:(len+1)
for j=2:(wid+1)
H(i-1,j-1)=G(i,j);
p1=G(i-1,j-1);
p2=G(i-1,j);
p3=G(i-1,j+1);
p4=G(i,j-1);
p5=G(i,j);
p6=G(i,j+1);
p7=G(i+1,j-1);
p8=G(i+1,j);
p9=G(i+1,j+1);
p10=G(i,j+2);
p11=G(i+2,j);
p12=G(i+2,j-1);
p13=G(i+2,j+1);
p14=G(i-1,j++2);
p15=G(i+1,j+2);
%8个消除模板,两个保留模板
%两个保留模板如果和
%消除模板中的人一个匹配,则和保留模板比对,若有匹配则保留1,否则删除为0,若和任
%意一个消除模板都不匹配,则直接保留
if (p5==1)
if ((p1==0&&p4==0&&p7==0&&p3==1&&p5==1&&p6==1&&p9==1)||(p1==0&&...
p2==0&&p3==0&&p5==1&&p7==1&&p8==1&&p9==1)||(p3==0&&p6==0&&...
p9==0&&p1==1&&p4==1&&p5==1&&p7==1)||(p7==0&&p8==0&&p9==0&&...
p1==1&&p2==0&&p3==0&&p5==0) ||(p4==0&&p7==0&&p8==0&&p2==1&&...
p5==1&&p6==1)||(p1==0&&p2==0&&p4==0&&p5==1&&p6==1&&...
p8==1)||(p2==0&&p3==0&&p6==0&&p4==1&&p5==0&&p8==0)||(p2==1&&...
p4==1&&p5==1&&p6==0&&p8==0&&p9==0))
if ((p2==0&&p11==0&&p12==1&&p13==0&&p4==1&&p5==1&&p6==1&&p8==1)...
||(p2==0&&p7==0&&p11==0&&p12==0&&p5==1&&p6==1&&p8==1&&p9==1)||(p2==0&&p9==...
0&&p11==0&&p13==0&&p4==1&&p7==1&&p8==1)||(p4==0&&p14==0&&p10==0&&p15==0&&p3...
==1&&p5==1&&p6==1&&p8==1)||(p4==0&&p9==0&&p10==0&&p12==0&&p15==0&&p3==1&&p5...
==1&&p6==1)||(p3==0&&p14==0&&p4==0&&p10==0&&p5==1&&p6==1&&p9==1)||(p1==0&&p2...
==0&&p4==0&&p9==0&&p11==0&&p13==0&&p5==1&&p6==1&&p7==1&&p8==1)||(p3==0&&p4==0&&...
p8==0&&p9==0&&p1==1&&p2==1&&p5==1&&p6==1)||(p2==0&&p6==0&&p7==0&&p11==0&&p12...
==0&&p13==0&&p4==1&&p5==1&&p8==1&&p9==1))
G(i,j)=1;
else
G(i,j)=0;
end
end
end
end
end
t=t+1;
end
H=G(2:len+1,2:wid+1);
subplot(2,2,3),imshow(H);
title('细化后图像')
save xihua H;
b=bwmorph(H,'spur',8);%删除细化图象上的毛刺
H1=bwmorph(b,'skel',6);
subplot(2,2,4),imshow(H1);
title('删除毛刺后的的细化图象');
save xihua1 H1;
toc;
t