当前位置: 代码迷 >> 综合 >> 【指纹识别】基于模板匹配算法解决指纹识别问题matlab源码
  详细解决方案

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

热度:55   发布时间:2023-12-03 20:22:17.0

一、简介

模型参考这里。

二、源代码

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-2for j=2:height-2if 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)==1out(i,j)=0;             end           if num==74out(i,j+1)=0;out(i+1,j+1)=0;endif num==146out(i-1,j)=0;out(i-1,j+1)=1;endif num==164out(i-1,j-1)=1;out(i,j-1)=0;endif num==41out(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;endif 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)==1out(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;endendif 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)==0out(i,j)=1;endif 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)==0out(i,j)=1;endif 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)==0out(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;endendif 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)==0out(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]endendend

三、运行结果

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

四、参考文献

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

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  相关解决方案