二、指纹图像的特征提取简介
指纹图像的特征提取是指纹识别的关键,而指纹匹配通常基于细节点匹配。指纹特征提取是从细化后的指纹图中得到细节特征点(即端点和分叉点),此特征点含有大量的伪特征,既耗时又影响匹配精度。本章采用了边缘去伪和距离去伪,使得特征点去伪前后减小了近1/3,然后提取可靠特征点信息,以便实现指纹匹配。基于MATLAB实现的指纹细节特征提取方法,并给出了去伪算法,算法实现简单快速,而且具有较高的准确率。
1 技术概述
指纹识别技术是一种应用前景非常乐观的生物识别技术,国内外很多机构都在进行相关研究,尽管目前已有多种商用自动指纹识别系统在市场上销售,但是不同商标的指纹识别机,指纹验证识别的快速性、准确性和可靠性都是不同的,一方面是指纹采集的偏差,另一方面也是指纹识别算法的不同,指纹识别算法的好坏,严重影响到指纹识别的准确率。因此如何提高指纹识别的算法的有效性和鲁棒性,一直以来是广大学者的研究热点以及难点。
在指纹自动识别系统中,首先是对指纹进行特征提取,然后根据特征及其相互之间的位置与拓扑关系在预先建立好的指纹库中进行匹配,从而检索到匹配指纹信息。指纹的特征主要指纹脊线的某种构型,如端点、分叉点等,本章也主要是对指纹的端点以及分叉点进行分析。
介绍了一套基于MATLAB 2014a实现的指纹细节特征提取及其后处理算法,以MATLAB 2014a作为指纹图像识别算法仿真的平台,具有较高的准确率,而且可以大大减小仿真的难度。
2 指纹识别系统的工作原理

3 指纹细节特征的提取
指纹特征去伪操作主要是将冗余的指纹特征的特征点滤除掉。
伪特征一半具有以下特点:大部分处于图像边缘;在图像内部的伪特征点距离较近,两个或多个伪特征同时存在于很小的区域内。
本章根据指纹图像伪特征分布特点提出了两种去伪方法:首先对于图像边缘的点,采用指纹图像切割的方法,即对边缘的点直接切除掉;然后利用最短距离阈值法去除距离较近的特征点。
三、部分源代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 指纹图像细节特征提取
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
origin=imread('im2.bmp');
subplot(2,2,1);imagesc(origin);
colormap(gray); xlabel('(a)原始图像')
I=im2bw(origin); % 二值化
%细化指纹图像,用匹配模板法
[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);imagesc(I);
xlabel('(b)细化后的指纹图像')
%特征点提取(端点或交叉点)
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);imagesc(I);
xlabel('(c)细化后的指纹图像')
hold on;plot(x,y,'bo');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<6 %去除距离较近的特征点
x(i)=-1;y(i)=-1;x(j)=-1;y(j)=-1;
end
end
end
thin_image=~bwmorph(binary_image,'thin',Inf);
figure;imshow(thin_image);title('Thinned Image');
% load('ridge.mat')
% load('bifurcation.mat')
% hold on
% plot(ridge_y,ridge_x,'r*')
% plot(bifurcation_y,bifurcation_x,'b.','markersize',8)
%% Minutiae extraction
s=size(thin_image);
N=3;%window size
n=(N-1)/2;
r=s(1)+2*n;
temp((n+1):(end-n),(n+1):(end-n))=thin_image(:,:);
outImg=zeros(r,c,3); % For Display
outImg(:,:,1) = temp .* 255;
outImg(:,:,2) = temp .* 255;
outImg(:,:,3) = temp .* 255;
for x=(n+1+10):(s(1)+n-10)
for y=(n+1+10):(s(2)+n-10)
e=1;
for k=x-n:x+n
f=1;
for l=y-n:y+n
mat(e,f)=temp(k,l);
f=f+1;
end
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.