【指纹识别】基于模板匹配算法解决指纹识别问题matlab源码

118 阅读6分钟

一、简介

模型参考这里

二、源代码

clear;
close all;
figure
w=0;
text11='指纹1';text12='指纹 2';
h=uicontrol('Style','pushbutton','String','开始','Callback','image1=scanimage;image2=scanimage;subplot(2,2,1);imagesc(image1);title(text11);subplot(2,2,2);imagesc(image2);title(text12);colormap(gray);','Position',[0,10,80,20]);
%text='Please input the block size';
%h=uicontrol('Style','pushbutton','String','二值化','Callback','W=inputdlg(text);
%W=str2num(char(W));subplot(2,2,3);o1=thres(image1,W);title(text21);subplot(2,2,4);o2=thres(image2,W);title(text22);','Position',[100,10,80,20]);
function out=thinning5(in)
 
 
%initial index table
%index=[0   0   0   0   0   0   0   1   0   0   1   1   0   0   1   1   0   0   0   0   0   0   0   0   0   0   1   1   1   0   1   1   0   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   0   0   1   1   0   0   1   1   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   1   0   0   0   0   0   0   0];
%new index table
%index=[0   0   0   0   0   0   0   1   0   0   1   1   0   0   1   1   0   0   0   0   0   0   0   0   0   0   1   1   1   0   1   1   0   0   0   0   0   0   0   0   1   0   1   0   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   0   0   1   1   0   0   1   1   0   0   1   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   0   0   0   0   0   1   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   1   0   0   0   0   0   0   0];
out=in;
index=[1    0   0   1   0   0   1   1   0   0   1   1   1   0   1   1   0   0   0   0   0   0   0   0   1   0   1   1   1   0   1   1   0   0   0   0   0   0   0   0   1   0   1   0   1   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   1   0   1   1   1   0   1   1   0   0   1   1   0   0   1   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   0   0   0   0   0   1   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   0   0   1   1   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   1   0   0   0   0   0   0   0];
[width,height]=size(in);
length=width*height;
for i=2:width-2
    for j=2:height-2
        if out(i,j)==1    
           num= out(i-1,j-1)+out(i-1,j) * 2+out(i-1,j+1) * 4+out(i,j+1) * 8+out(i+1,j+1) * 16+out(i+1,j) * 32+out(i+1,j-1) * 64 + out(i,j-1) * 128;
           if  index(num+1)==1
               out(i,j)=0;             
           end           
           if num==74
              out(i,j+1)=0;
              out(i+1,j+1)=0;
            end
           if num==146
              out(i-1,j)=0;
              out(i-1,j+1)=1;
           end
           if num==164
               out(i-1,j-1)=1;
              out(i,j-1)=0;
           end
           if num==41
             out(i+1,j-1)=1;
            out(i+1,j)=0;
            end
            %保留模板
           if out(i-1,j)==1 & out(i-1,j+2)==0 &out(i,j-1)==0 &out(i,j+1)==1 &out(i,j+2)==0 & out(i+1,j)==1 & out(i+1,j+2)==0 
               out(i,j)=1;
           end
           if out(i-1,j+1)==0 &out(i-1,j+2)==0 &out(i,j-1)==0 & out(i,j+1)==1 & out(i,j+2)==0 & out(i+1,j+1)==1
               out(i,j)=1;
               if num==120 & out(i-1,j+2)==0 & out(i+1,j+2)==1 &out(i+2,j-1:j+2)==[1 1 1 1]
                   out(i,j)=0;
               end
           end
           if out(i-1,j+1)==1 & out(i,j-1)==0 & out(i,j+1)==1 &out(i,j+2)==0 & out(i+1,j+1)==0 out(i+1,j+2)==0
               out(i,j)=1;
           end
           if out(i-1,j)==0 & out(i,j-1)==1 & out(i,j+1)==1 & out(i+1,j)==1 &out(i+2,j-1)==0 & out(i+2,j)==0 & out(i+2,j+1)==0
               out(i,j)=1;
           end
           if out(i-1,j)==0 & out(i+1,j-1)==1 & out(i,j+1)==1 & out(i+1,j+1)==0 & out(i+2,j)==0 & out(i+2,j+1)==0
               out(i,j)=1;
               if num==225 & out(i-1,j+2)==0 & out(i,j+2)==0 & out(i+1,j+2)==0 & out(i+2,j-1:j+2)==[1 0 0 0]
                   out(i,j)=0;
               end
           end
           if out(i-1,j)==0 & 

out(i+1,j-1)==0 & out(i+1,j)==1 & out(i+1,j+1)==1 & out(i+2,j-1)==0 & out(i+2,j)==0
               out(i,j)=1;
               if num==60 & out(i-1,j+2)==1 & out(i,j+2)==1 & out(i+1,j+2)==1 & out(i+2,j-1:j+2)==[0 0 1 1]
                 
               end
           end
          end

三、运行结果

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、参考文献

[1]王崇文, 李见为, 周宏文,等. 指纹识别系统的设计与实现[J]. 计算机应用, 2001(12):63-65.

五、代码下载

获取代码方式1:

完整代码已上传我的资源

获取代码方式2:

通过博主主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。

获取代码方式3:

通过订阅博主博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:开通CSDN会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效); 订阅博主付费专栏,可免费获得2份代码(有效期为订阅日起,三天内有效);

博主擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真