基于MATLAB的指纹识别系统

21世纪是信息化时代,在这个特殊的时代,我们的生活中电子设备越来越多,比如,笔记本电脑, ATM取款机,考勤系统,门禁系统和各种智能卡,网络中的网上银行,人人网账号等,都需要验证身份。对个人身份识别技术的要求不断提高,如果没有安全可靠和快捷的身份识别技术,电子商务、网上购物等就存在重大隐患。目前许多身份验证系统都采用“用户名+密码”的方式来进行用户访问控制,但此方法存在诸多隐患,比如密码被窃取、破解或遗忘。因此我们在与机器交互时急需一种准确、安全快捷的识别技术来取代现有的身份验证。
基于MATLAB的指纹识别系统_第1张图片
指纹识别的流程:

  • 指纹图像采集
  • 指纹预处理
  • 特征提取
  • 指纹的匹配

指纹图像的采集,本文选取了五种指纹图像,具体如图所示,
基于MATLAB的指纹识别系统_第2张图片
指纹的预处理是为了准确可靠找到图像的特征,以保障后续的指纹匹配与分类。这主要包括灰度图像滤波去噪、二值化、二值化图像去噪、指纹的细化处理等。
基于MATLAB的指纹识别系统_第3张图片


%---------------取图像的中心点------------------------
[XofCenter,YofCenter] = centralizing(EnhanceFingerPrint);
%---------------二值化图像-----------------------------
[BinarizationFingerPrint,theta]=orientation(EnhanceFingerPrint);
%----------------进行中值滤波处理----------------------
AfterFilt=median_filter(BinarizationFingerPrint);
%----------------二值化图像细化处理--------------------
ThinFingerPrint=thinning(AfterFilt);

指纹的特征提取,用3x3的模板逐点对细化后的指纹图像的脊线进行检测,就可以初步选出所有的细节特征,记录下这些细节特征的类型和位置坐标,以便于下一步的剪枝处理。先去除伪特征端点,得到想要的特征点和中心点。特征端点用’o’标注,特征分叉点用’+‘标注,中心点用红色’*'标注。
基于MATLAB的指纹识别系统_第4张图片

%------------------------特征提取-------------------------------
[dimx,dimy]=size(temp);
Tsum=zeros(dimx,dimy);
for i=2:dimx-1
    for j=2:dimy-1
	    Tsum(i,j)=temp(i-1,j-1)+temp(i-1,j)+temp(i-1,j+1)+temp(i,j-1)+...
		          temp(i,j+1)+temp(i+1,j-1)+temp(i+1,j)+temp(i+1,j+1);
	end
end
%-----------------求可能的特征点集------------------------------
dpcount1=0;
fpcount1=0;
for i=21:dimx-20
    for j=21:dimy-20
	    if temp(i,j)==0&Tsum(i,j)==1785
	    dpcount1=dpcount1+1;
		dpx1(dpcount1)=i;
		dpy1(dpcount1)=j;
        elseif temp(i,j)==0&Tsum(i,j)==1275&((temp(i-1,j)==0&temp(i,j+1)==0&temp(i+1,j-1)==0)|...
		                                     (temp(i-1,j)==0&temp(i,j-1)==0&temp(i+1,j+1)==0)|...
		                                     (temp(i-1,j+1)==0&temp(i,j-1)==0&temp(i+1,j)==0)|...
		                                     (temp(i-1,j-1)==0&temp(i,j+1)==0&temp(i+1,j)==0)|...
	   ((temp(i-1,j)==0|temp(i-1,j-1)==0|temp(i-1,j+1)==0)&temp(i+1,j-1)==0&temp(i+1,j+1)==0)|...
	   (temp(i-1,j+1)==0&(temp(i,j-1)==0|temp(i-1,j-1)==0|temp(i+1,j-1)==0)&temp(i+1,j+1)==0)|...
	   (temp(i-1,j-1)==0&temp(i-1,j+1)==0&(temp(i+1,j)==0|temp(i+1,j-1)==0|temp(i+1,j+1)==0))|...
	   (temp(i-1,j-1)==0&(temp(i,j+1)==0|temp(i-1,j+1)==0|temp(i+1,j+1)==0)&temp(i+1,j-1)==0))
		fpcount1=fpcount1+1;
		fpx1(fpcount1)=i;
        fpy1(fpcount1)=j;
        end
    end
end	

指纹的匹配,根据得到的特征端点和特征点进行分类,特征端点分类为1,特征分叉点分类为2;建立特征端点相对中心点的距离向量,和特征分叉点相对中心点的距离向量;建立特征端点相对中心点的方向向量,和特征分叉点相对中心点的方向向量。按相同的原理得到待匹配指纹的特征点和特征端点。选用点类型匹配,找到一个指纹细化图像的特征点后,在该端点周围找到四十个端点或者交叉点,统计在这四十个特征点中端点的个数和交叉点的个数。若有两幅指纹细化图像中的端点所占的比例近似相同,则两幅图像相匹配,越近似,则越相同。
基于MATLAB的指纹识别系统_第5张图片

%------------------------指纹匹配-------------------------------
 if (PointOfModel(i,1)==PointOfMatch(j,1))&(abs(PointOfModel(i,2)-PointOfMatch(j,2))<2)&...
         (abs(PointOfModel(i,3)-PointOfMatch(j,3))<pi/4|abs(PointOfModel(i,3)-PointOfMatch(j,3))==pi/4)
            Count=Count+1;
            y(Count)=PointOfModel(i,2)-PointOfMatch(j,2);
            z(Count)=PointOfModel(i,3)-PointOfMatch(j,3);
            %不同图像匹配的维度不同,容易出现错误,省略掉
            if PointOfModel(i,1)==1
                plot(Dpy(i),Dpx(i),'or');
            else
                %plot(Fpy(i-size(Dpx,2)),Fpx(i-size(Dpx,2)),'og');
                plot(Fpy(abs(i-size(Dpx,2))),Fpx(abs(i-size(Dpx,2))),'og');
            end    
        end

经过测试,识别率准确率可以达到95%以上。
本文MATLAB GUI 界面如下,
基于MATLAB的指纹识别系统_第6张图片
如需转载,请注明作者出处,谢谢。qq-134-170-3358

你可能感兴趣的:(项目实战,计算机视觉,人工智能,图像识别,机器学习)