一、简介
模型参考这里。
二、源代码
clear all
clc
I=im2bw(imread('1.jpg'));%将读入的图像变为二值图像
subplot(2,2,1);imshow(I);title('原始指纹图像');%显示原始指纹
[M,N]=size(I);
for i=2:M-1
for j=2:N-1
if I(i,j)==0
if (I(i-1,j)==0&I(i,j+1)==0)|(I(i-1,j)==0&I(i,j-1)==0)|(I(i+1,j)==0&I(i,j-1)==0)|(I(i+1,j)==0&I(i,j+1)==0)
I(i,j)=1;
else
I(i,j)=0;
end
end
end
end
%用已知的四种模板对图像进行匹配,进行细化后处理,使其真正达到占一个像素的
% 宽度
subplot(2,2,2);imshow(I);title('细化指纹图像');%显示细化后指纹
t=0;
for i=2:M-1
for j=2:N-1
if I(i,j)==0
n=I(i-1,j-1)+I(i-1,j)+I(i-1,j+1)+I(i,j-1)+I(i,j+1)+I(i+1,j-1)+I(i+1,j)+I(i+1,j+1);
if (n==7||n==5)
t=t+1;
x(t)=j;
y(t)=i;%记录下特征点的位置
end
end
end
end %用模板匹配法进行指纹特征点的提取,端点和分叉点
subplot(2,2,3);imshow(I);title('提取指纹中的特征点(端点和分叉点)')
hold on;plot(x,y,'r*');hold off; %画出特征点
for i=1:t-1
for j=i+1:t %指纹特征去伪
d=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
if d<3 %用距离阈值的方法去除距离较近的特征点
x(i)=-1;y(i)=-1;x(j)=-1;y(j)=-1;
end
end
end
c=0;d=0;
for i=1:t
if (x(i)>=10&x(i)<max(x)-10)&(y(i)>=10&y(i)<max(y)-10) %去除边缘的特征点
c=c+1;l(c)=x(i);d=d+1;h(d)=y(i);
end
end
x=find(x);y=find(y);
subplot(2,2,4);imshow(I);title('去除伪特征点')
hold on;plot(l,h,'r*'); hold off;
三、运行结果
四、参考文献
[1]王崇文, 李见为, 周宏文,等. 指纹识别系统的设计与实现[J]. 计算机应用, 2001(12):63-65.