一、简介

1 指纹识别的引入和原理
1.1 指纹的基本知识
指纹,由于其具有终身不变性、唯一性和方便性,已几乎成为生物特征识别的代名词。指纹是指人的手指末端正面皮肤上凸凹不平产生的纹线。纹线有规律的排列形成不同的纹型。纹线的起点、终点、结合点和分叉点,称为指纹的细节特征点(minutiae)。如图1-1所示。

1.2 指纹识别的原理及算法流程
指纹识别即指通过比较不同指纹的细节特征点来进行鉴别。指纹识别技术涉及图像处理、模式识别、计算机视觉、数学形态学、小波分析等众多学科。由于每个人的指纹不同,就是同一人的十指之间,指纹也有明显区别,因此指纹可用于身份鉴定。由于每次捺印的方位不完全一样,着力点不同会带来不同程度的变形,又存在大量模糊指纹,如何正确提取特征和实现正确匹配,是指纹识别技术的关键。
指纹识别技术主要包括三大部分:指纹图像采集、指纹预处理、特征提取与匹配。如图1-4所示。

2 指纹图像预处理
图像预处理是对原始图像进行的一种前期处理,方便后续的模块识别。无论采用何种方式获取的指纹图像, 都有一部分由于质量原因, 不能被系统直接识别,因此图像的预处理就显得非常有必要。
指纹图像的预处理目的就是将自己感兴趣的目标区域保留下来,去除背景区域和没有用的部分,同时根据指纹目标区域中脊线的结构特征,采取较好的滤波方法,提高指纹脊线清晰度,平滑脊线边缘的毛刺和空洞,抑制图像噪声,保证指纹特征的可靠提取,并使灰度图像转化成黑白的二值图像,最终得到脊线结构清晰的单像素宽的二值图像。本文预处理的主要流程如图2-1所示。

2.1 指纹图像的采集
因本设计重点是对指纹图像的处理,最终得到匹配结果,因此指纹图像的获取并非本设计的重点。指纹图像的获取可以借助市面上的指纹采集器货得,或者自行利用手机和数码相机等拍摄器材采集。
2.2图像的灰度处理
图像的灰度化是保留原有像素的透明度的,即透明度不参与像素的运算。该运算公式为:
gray = R 0.299 + G * 0.587 + B * 0.114
这个公式的意思是原图的一个像素区域包含了RGB的三个颜色值,而目标灰度图上相对应的像素上的颜色值为由上面的公式计算得到。这里有个问题就是,你需要结果图是24位(如果包含Alpha则是32位)还是8位,如果是24位,则结果灰度图还是RGB的,只不过R=G=B=gray,如果是8位的,一个像素就只包含一个颜色值gray。
图像的灰度化是图像处理中很基本的算法,同时也是其他图像处理或是识别的基础,有些智能算法都是基于单色8位灰度图进行的,因为他减少了计算量。
2.3 图像的二值化
二值化就是将图像上的像素点的灰度值设置为0或1,也就是将整个图像呈现出明显的黑白视觉效果。指纹图像中包括目标和背景还有众多噪声,要想从原始的指纹图像中提取出目标,一般用的方法是设定一个阈值T,用T将图像中像素数据分成两部分,若输入灰度图像的函数为:

通过求解阈值T,从而把图像f(x,y)分成目标和背景两个区域,其中大于T的像素群为目标区域,小于等于T的像素群为背景区域,阈值的选取原则是:(1)尽可能的多保存图像信息;(2)尽可能的减少噪声。
本文将讨论基于方向场的二值化处理。
采集到的指纹图像一般都有比较清晰的方向场,方向场估计得准确与否直接决定了图像二值化算法的效果。
为估计方向场,我们把指纹脊线的走向分为如下8个方向,如图2-6所示:

我们先对分割后的图像进行了平均滤波,然后对图像的每一个像素,为确定在该像素处的脊线方向,在以该像素为中心的99窗口内,分别计算8个方向上的经过处理后的灰度值,即将图2-6中数字1到8的位置的像素灰度值去除其中最大summax和最小值summin,若满足最大的summax和最小的summin与 4I(x,y))之和大于 (3
summ/8),则该像素点的脊线方向为summin,否则为summax.确定完脊线方向后再由该方向场对图像进行二值化。
结果如下:

2.4 图像细化
二值化处理后,脊线仍然有一定的宽度,指纹识别的匹配是只利用图像的点或线的特征,这些点或者特征只与脊线的走向或者纹理有关系,有一定宽度的二值化图像显得有些多余,所以需要对二值化图像进行细化处理,指纹二值化图像经过细化处理即可得到一个单一像素宽度的脊线,经过上述的细化处理,在后续的指纹特征提取和特征匹配的算法中大大的减少了计算的冗余量和出错率,使得指纹识别的速度和准确度有了很大的提高。
细化目的是在不破坏指纹图像连通性的情况下去除掉多余的信息(即多余的像素点),将二值化的指纹图像的脊线采用逐层剥离的方法,将图像中的指纹脊线细化成单象素宽(实际为保存原图的骨架)。
这里是利用matlab库函数bwmorph,调用格式为:BW2 = bwmorph(BW,operation,n)应用形态学操作n次,n可以是Inf,这种情况下该操作被重复执行直到图像不再发生变化为止。
‘thin’ n = Inf时,减薄目标成线。没有孔洞的目标缩成最低限度的连通边;有孔洞的目标缩成连通环。
3 图像特征提取和特征匹配
3.1 特征点提取
(1)提取指纹的端点和交叉点
端点和交叉点均是指纹图像的两个细节特征,同时在指纹识别的的过程中起着重要的作用,因为识别的首要前提就是找到图像的所有端点和交叉点。通过point.m函数来找出细化后指纹图像的所有端点及交叉点。
将八邻域中的每个点依次两两相减并取其绝对值,后将所有结果加起来,因为端点处是两个点,即和为2时细化图像有端点,和为6时图像特征为交叉点。
运行完上面的point.m函数的程序后,能把细化图像的的端点和交叉点全部找出。在定义函数的程序中有数组txy,其中t为横坐标,x为纵坐标,y为2时为端点,y为6时为交叉点。
(2)去除图像边缘的端点[去伪]
可以看出,指纹图像细化的边缘,由于采集仪器不同的关系,因此不可避免的会多出很多的端点,这些端点不仅增加了后续的工作量,还可能导致识别过程中产生错误,所以要把这些边缘的端点都去除,在matlab中这些操作都可以采用一函数来实现,本实验中设计了一cut.m函数来进行处理。
3.2 找出特征点
设置三个函数来找出图像的特征点:
(1)single_point函数
经过去除边缘端点的操作后进一步减少了指纹细化图像中的端点和交叉点的个数。下面就需要找出一些在细化图像中比较独特的端点来作为识别的特征点。在一幅细化的指纹图像中,如果在一个像素(该像素为端点)的周围半径为r(r为像素的个数)的圆内没有任何的端点或者交叉点,那么随着r的逐渐增大,这样的点就会越来越少,因此该点也就越来越独特。于是我们设计了一single_point函数来找出这样独特的点。
(2)walk函数
为了进一步找出特征点,我们还需定义一walk函数,它的主要作用就是判断某一端点在num的距离内是否还有其他的端点。
(3)last1函数
single_point函数和walk函数都是找细化图像特征点的函数,因此可以设计另一个新的last1函数,通过执行
[pxy3,error2]=last1(thin,r,txy,num)
可以找出一端点以r为半径的像素内的任何端点和交叉点且沿着脊线走向的num内没有任何的其他端点和交叉点。
3.3 特征点匹配
由上文的函数可知,已经找出了指纹细化图像中的特征点,并画出了一段独特的脊线,在图像中用红色来标示。下面就是指纹匹配[12]的问题了。在此我们设置了三层匹配。
(1)脊线长度匹配
对于上面的函数即可找出细化图像中的特征点和一段脊线,沿着该段脊线走向,每隔五个像素测量一下,看到到原始端点的距离,此段距离由一distance函数得到。
函数结果会得到一数组(内有脊线的长度信息)。如果两幅指纹细化图像中的纹路是相同的,则它们就包含相同的端点和交叉点及用distance函数找出的相同的一段脊,则这两个指纹图像中的长度数组对应的位置比例会基本相等(我们选择的指纹图像大小基本相等,因此该比例选1),因此函数最终定义了一个数f=(sum(abs((d1./d2)-1))),其中若f的值越接近于0,这两幅图像的匹配度就越高,在一定范围的阈值内我们可以认定为匹配。
(2)三角形边长匹配
找到一个指纹细化图像的特征点后,可以找出距离这个端点距离最近的两个端点或者交叉点,与这个指纹图像细化的特征点构成一个三角形,若两幅图像中的边长比例基本相等(原理同上,也选1),则说明这两幅图像匹配,越接近于1说明这两幅指纹图像越匹配。其中设置一find_point函数来找出距离最近的端点或交叉点。
函数最后定义了一个数ff=(sum(abs((dd1./dd2)-1))),因此ff值越接近于0,这两幅指纹图像的匹配度越高,在一定范围的阈值内我们可以认定为匹配。

二、源代码

function varargout = gui1(varargin)
% GUI1 MATLAB code for gui1.fig
%      GUI1, by itself, creates a new GUI1 or raises the existing
%      singleton*.
%
%      H = GUI1 returns the handle to a new GUI1 or the handle to
%      the existing singleton*.
%
%      GUI1('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI1.M with the given input arguments.
%
%      GUI1('Property','Value',...) creates a new GUI1 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before gui1_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to gui1_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help gui1% Last Modified by GUIDE v2.5 19-May-2018 10:57:01% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @gui1_OpeningFcn, ...'gui_OutputFcn',  @gui1_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before gui1 is made visible.
function gui1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to gui1 (see VARARGIN)
% Choose default command line output for gui1
handles.output = hObject;
A=imread('指纹3.jpg');
set(handles.pushbutton1,'CData',A);
B=imread('指纹19.jpg');
set(handles.pushbutton3,'CData',B);C=imread('指纹18.jpg');
set(handles.pushbutton7,'CData',C);D=imread('指纹6.jpg');
set(handles.pushbutton4,'CData',D);E=imread('指纹17.jpg');
set(handles.pushbutton5,'CData',E);F=imread('指纹5.jpg');
set(handles.pushbutton8,'CData',F);G=imread('指纹8.jpg');
set(handles.pushbutton9,'CData',G);
% ha=axes('units','normalized','position',[0 0 1 1]);
% uistack(ha,'down')
% II=imread('动态图片2.jpg');%里面的参数可以是你自己的图片,把名字连同格式写进去就可以了
% image(II)
% colormap gray
% set(ha,'handlevisibility','off','visible','off');guidata(hObject, handles);% UIWAIT makes gui1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = gui1_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
hfigure2=Fingerprint_gui();
handles.hfigure2=hfigure2;
guidata(hObject,handles);% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
function out = thinning2(in);%thinning process obtain a one pixel wide image skeleton
% use function n_sum and t_sum[w,h] = size(in);out = in;for i= 3:h-2
for j= 3:w-2if out(i,j) == 1if 1 < n_sum(i,j,out) &  n_sum(i,j,out) < 7 if  t_sum(i,j,out) == 2if or ( and_157(i,j,out) == 0  , t_sum(i,j-1,out) ~= 2 )if or (and_357(i,j,out) == 0  , t_sum(i+1,j,out) ~=2 )   %        if and_157(i,j,out) == 0% if  and_357(i,j,out) == 0   out(i,j) = 0;elseout(i,j) = 1;end;elseout(i,j) = 1;end;elseend;end;

三、运行结果

【指纹识别】基于模板匹配算法指纹识别匹配门禁系统matlab源码相关推荐

  1. 【语音识别】基于智能语音识别门禁系统matlab源码含GUI

    一.简介 本文基于Matlab设计实现了一个文本相关的声纹识别系统,可以判定说话人身份. 1 系统原理 a.声纹识别     这两年随着人工智能的发展,不少手机App都推出了声纹锁的功能.这里面所采用 ...

  2. 基于android的门禁系统代码,基于ESP8266 base on esp8266门禁系统 安卓源码

    基于ESP8266门禁系统安卓源码 视频中的小伙伴是我的搭档,负责硬件电路搭建,为了搭电路没少熬夜,挺感谢他的. 这是本人的毕业设计(专科)历时一个月完成.在做毕业设计之前一直在准备转本考试,考完试, ...

  3. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  4. 基于树莓派百度Api的人脸门禁系统--毕业设计

    基于树莓派百度Api的人脸门禁系统 在学校中因为上课原因,没有拿到关于电气及其自动化本专业的毕业题目,但是门禁系统让我眼前一亮.此题目是我硬着头皮接下的. 为了更好的做完自己的毕业设计,在不断的学习p ...

  5. 基于改进PSGAN的AI自动美颜化妆系统(源码&教程)

    1.研究背景 在计算机视觉领域,基于人脸图像的合成与分析一直是热门的研究课题.人脸表情合成在影视娱乐.人工智能产业应用广泛,自动化妆技术在美妆行业有着巨大的应用前景.虽然人脸图像合成技术在近几年得到了 ...

  6. php异业联盟平台源码,基于ThinkPHP5.1框架开发的B2C在线商城系统PHP源码

    会员优惠 会员优惠 月费会员8折.年费会员5折.永久会员2折 源码介绍 基于ThinkPHP5.1框架开发的B2C在线商城系统PHP源码,支持WAP手机端+微信小程序+支付宝小程序+多种支付方式! 这 ...

  7. 计算机毕业设计ssm基于SSM的美妆分享网站vf952系统+程序+源码+lw+远程部署

    计算机毕业设计ssm基于SSM的美妆分享网站vf952系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于SSM的美妆分享网站vf952系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构 ...

  8. 计算机毕业设计ssm基于微信的的高校起床协会管理61rmm系统+程序+源码+lw+远程部署

    计算机毕业设计ssm基于微信的的高校起床协会管理61rmm系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于微信的的高校起床协会管理61rmm系统+程序+源码+lw+远程部署 本源码技术栈: ...

  9. 计算机毕业设计ssm基于协同过滤的图书馆图书推荐系统9xpkg系统+程序+源码+lw+远程部署

    计算机毕业设计ssm基于协同过滤的图书馆图书推荐系统9xpkg系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于协同过滤的图书馆图书推荐系统9xpkg系统+程序+源码+lw+远程部署 本源码技 ...

最新文章

  1. 部署在IIS上的网站如何调试
  2. python 枚举相等判断_离散数学实验_python
  3. MemoryStream 反序列化的报错问题
  4. JAVA并行框架:Fork/Join
  5. 图像处理之添加文字水印
  6. spring+hibernate中的Result object returned from HibernateCallback isn't a List
  7. vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd
  8. python脚本编程实例_从零学python系列之数据处理编程实例(一)
  9. linux中控和安卓中控哪个比较好,原厂中控和改装中控有什么区别?哪个更好?...
  10. Java分段函数选择结构,编程流程作业选择结构(50题)
  11. 2.7 if应用:猜拳游戏
  12. Zalo电脑版多开软件
  13. Selenium获取动态图片验证码
  14. 一步一步学Silverlight 2系列(30):使用Transform实现更炫的效果(下)
  15. python span 抓取_如何用python爬取两个span之间的内容
  16. 【供应链架构day4】途牛进销存架构的演进之路 - 从诞生到发展
  17. C#人民币大小写金额转换(C#版本)
  18. TCP/IP协议——TCP协议
  19. SpringBoot+Vue项目大学生租房平台
  20. SWAPIDC主机系统 对接三方银行支付接口扩展插件 微信+支付宝接口

热门文章

  1. STM32 MPU 阅读笔记
  2. 教育部司长:建议开展琴棋书画等校外培训!
  3. Object.freeze()
  4. selenium+java发送cookie,绕过验证码登录
  5. Inspiron光驱改装固态硬盘_Win10系统安装
  6. 华为拍摄月亮专利公布: 多次曝光获取月亮清晰轮廓
  7. 1144106-65-9,Bromo-PEG1-azide,Bromo-PEG1-N3叠氮基团可以通过点击化学与炔烃、BCN、DBCO反应,生成稳定的三唑键
  8. ubuntu怎么看服务器固态硬盘多大
  9. VM/VB虚拟机镜像
  10. 测试开发之路-我的处女作