指纹识别算法的matlab实现.docx
- 文档编号:4928742
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:38
- 大小:1.54MB
指纹识别算法的matlab实现.docx
《指纹识别算法的matlab实现.docx》由会员分享,可在线阅读,更多相关《指纹识别算法的matlab实现.docx(38页珍藏版)》请在冰豆网上搜索。
指纹识别算法的matlab实现
指纹识别算法的matlab实现
摘要由于指纹所具有的普遍性,唯一性和不变性,以及指纹识别技术具有很高的可行性和实用性,使之成为目前最流行、也最可靠的个人身份认证技术之一。
本文主要对指纹图像进行三方面处理:
图像预处理、特征提取和特征匹配。
图像预处理包括四个步骤:
图像分割、滤波增强、二值化、细化,对指纹图像进行预处理后,去除了原图像的冗余部分,方便后续的识别处理;特征提取主要是提取指纹图像细化后的端点和分叉点;特征匹配是利用两个指纹的图像进行特征点比较,来确定两幅图像是否来自于同一手指。
本文给出了指纹图像预处理、特征提取、特征匹配的matlab程序及处理结果。
该结果证明,用matlab实现的这些算法的处理结果比较理想,满足识别的可行性和应用性。
关键词分割,二值化,细化,特征点提取,匹配,Matlab
Abstract
Becauseoftheuniversality,uniquenessandconstantnessofafingerprint,andfingerprintidentificationtechnologyhasveryhighfeasibilityandpracticalapplicability,makeittobeoneofthemostpopular,andmostreliablepersonalidentityauthenticationtechnology.
Thispaperfocusesonthreeaspectsofthefingerprintimageprocessing:
imagepreprocessing,featureextraction,featurematching.Imagepreprocessingincludingfoursteps:
imagesegmentation,filtering,binary,Refining,afterThefingerprintimagepreprocessing,inadditiontotheoriginalimageofredundancypart,convenientsubsequentidentificationprocessing;Themainfeatureextractionisextractedfromtheendofthefingerprintimageafterthinningandbifurcationpoint;Featurematchingisusetwofingerprintimagefeaturepointistodeterminewhetherthetwoimagesfromthesamefinger.
Thispaperprovidesthefingerprintimagepreprocessing,featureextraction,featurematchingusematlabandhandlingresults,Theresultsprovethatthesealgorithmshadidealresultsbeusedbymatlab,,Besatisfiedwiththerecognitionandfeasibilityoftheapplication.
KeyWords:
Segmentation,Binary,Refining,Featurepointextracting,Matching,Matlab
第1章绪论
1.1指纹识别概述
21世纪是信息化时代,在这个特殊的时代,我们的生活中电子设备越来越多,比如,笔记本电脑,ATM取款机,考勤系统,门禁系统和各种智能卡,网络中的网上银行,人人网账号等,都需要验证身份。
对个人身份识别技术的要求不断提高,如果没有安全可靠和快捷的身份识别技术,电子商务、网上购物等就存在重大隐患。
目前许多身份验证系统都采用“用户名+密码”的方式来进行用户访问控制[1],但此方法存在诸多隐患,比如密码被窃取、破解或遗忘。
因此我们在与机器交互时急需一种准确、安全快捷的识别技术来取代现有的身份验证。
1.1.1研究背景及意义
因为人的一些特殊的生物特征,人们把身份认证技术的目光转向了生物特征的识别技术。
生物识别技术是利用人体生物特征进行身份认证的一种技术,它主要有指纹、手形、脸形、声音、虹膜、视网膜、签名、掌纹、和脸部热谱图等,在生物识别技术中指纹识别技术是目前相对成熟的一种。
1.1.2国内外研究状况
指纹是人特有的一种特征,在中国的研究也有近百年的历史,中国被认为是世界上最早应用指纹识别技术的国家,指纹识别技术从很早以前的人工比对到现如今采用先进的计算机技术实现指纹的识别,使得指纹对比比以前更加准确,识别效率得到了非常大的提高。
在国外,经过几十年的发展,指纹识别技术的软件和硬件相对来说都比较成熟。
在很多国家内,政府用法律强制性的规定来保证生物识别技术的应用。
所以总体上来说,国外的指纹识别应用己经进入了正规的应用阶段。
但是在国内,经过了十多年的发展,指纹识别的一些关键算法是有了较大的提高和发展,但是距离国外的优秀算法仍然有非常大的差距,因此国内的应用现在处于发展的初期,应用主要集中在自发性的企业上。
指纹识别的应用前景是非常广阔的,它的应用将渗透到社会生活,经济贸易的每一个角落,将成为保护我们个人以及国家信息的重要手段。
1.2指纹识别的原理和方法
1.2.1指纹的基本知识
指纹是我们各个手指的第一个指节的指头表面突起的脊线;而脊线是手指突起的花脊线条;谷线是两个脊线之间低凹下去的部分;指印是指纹在物体表面留下的痕迹;指纹的细节特征是指纹固有的自身特点。
根据指纹中的细节特征我们常将指纹特点分为端点和分叉点,如图1-1所示。
图1-1端点、分叉点
英国科学家Gallon在1892年的《Fingerprint》一书中提出了指纹的四条基本性质。
(1)确定性:
指纹脊线的轮廓和细节特征是在人的一生中基本上保持不变。
自胚胎六个月到出生至死亡腐败之前,始终是没有很大变化的。
指纹的确定性,还表现在它具有一定的复原性和难于毁灭的特性。
(2)唯一性:
由于指纹脊线的连接关系千变万化,因此,即使两个不同的指纹有着相同的轮廓和相同数量的细节特征,它们的细节位置也是不可能完全相同的。
(3)可分类性:
指纹可根据脊线和谷线的走向进行分类,一般可分为如图1-2所示的弓形、环形和螺旋形。
(a)弓形(b)环形(c)螺旋形
图1-2指纹类型
(4)留痕性:
指纹接触物体后会留下痕迹。
指纹的这个特点,是与手掌表面附着面的污垢的性能紧密相关的。
正是因为这些独特的性质,指纹被国内外的刑侦界称为“证据之首”。
一切指纹的自动识别系统,都是根据这些独特的性质,进行身份的识别和确认的。
脊线是指纹的一个非常突出的特征,指纹的脊线一般由弓形线、环形线、箕形线、螺形线、曲形线和棒形线等脊线组成,每种脊线具有不同的细节和长度,如图1-3所示[2]。
图1-3脊线的一般形态
1.2.2指纹识别的原理及应用
在指纹识别的技术中,一般都采用总体特征和局部特征来进行识别。
总体特征是那些很容易就能看出来的非常明显的特征,局部特征则是一小块指纹中的细节特征。
指纹纹路一般都会有断点和分叉点,因此会形成一些独特的节点。
根据研究,两个指纹的总体特征有时候会很相似,但是局部特征是不会相同的,即没有两个指纹的纹路是相同的。
英国学者E.G.Herry认为,只要有13个特征点能重合,就可以确认这两枚指纹是同一指纹[3]。
指纹的面积虽然不大但却蕴含着大量的识别信息。
这些皮肤的纹路会在交叉点,断点上有很大的区别。
在指纹识别的过程中将其称为“特征点”,利用特征点的性质,我们可以把一个人的指纹同预先存储起来的指纹模版对比来验证他的真实身份。
指纹识别技术主要包括三大部分:
指纹图像采集、指纹预处理、特征提取与匹配。
如图1-4所示。
图1-4指纹识别流程
指纹作为人类与生俱来的特征,因为其独有的特性而成为具有法律地位的有力证据。
一切需要身份确认的场所,都有它的踪影,如金融证券类的ATM指纹终端、指纹保险箱等、IT类的计算机的系统密码验证、网络安全等、安防类的门禁系统等、医疗类的个人医疗档案验证等、福利类的医疗确认、福利确认等,因此指纹识别在许多行业的应用系统中都具有广阔的应用前景。
1.3Matlab在指纹识别中的应用
Matlab是一种高级的计算机语言,具有独特的数学运算能力是matlab语言最突出的优点。
许多在其他语言中描述起来很复杂的问题在matlab语言编程中却只需要一条专用的指令就可以完成。
Matlab语言的所有计算都是基于矩阵的,所以matlab中的所有变量都被定义为矩阵,它是一种解释型语言,因此几乎没有语法格式上的限制。
基于matlab实现指纹图像算法及仿真验证不仅有较高的准确率,而且减小了仿真难度。
第2章指纹图像预处理
图像预处理是对原始图像进行的一种前期处理,方便后续的模块识别。
无论采用何种方式获取的指纹图像,都有一部分由于质量原因,不能被系统直接识别,因此图像的预处理就显得非常有必要。
指纹图像的预处理目的就是将自己感兴趣的目标区域保留下来,去除背景区域和没有用的部分,同时根据指纹目标区域中脊线的结构特征,采取较好的滤波方法,提高指纹脊线清晰度,平滑脊线边缘的毛刺和空洞,抑制图像噪声,保证指纹特征的可靠提取,并使灰度图像转化成黑白的二值图像,最终得到脊线结构清晰的单像素宽的二值图像。
本文预处理的主要流程如图2-1所示。
图2-1预处理流程
2.1图像的分割
图像分割是从一幅图像中按一定规则将一些物体或区域加以分离,划分出我们感兴趣的部分或区域。
经过分割后的图像更容易进行进一步的分类、分析和识别处理。
图像分割要在指纹二值化和滤波及细化之前进行,如此可以减少计算的冗余量,提高指纹检测速度。
采集到的指纹内容分为目标区域和背景区域。
在指纹图像中,由脊线和谷线组成的较清晰的部分,称之为目标区域;没有用的部分我们称之为背景区域。
指纹识别中的分割就是将有用的目标区域分割出来,去掉没用的背景区域,以避免背景区域的各种干扰。
指纹图像可分为四类区域:
背景区、不可恢复区、可恢复区、清晰区,如下图2.2所示。
图2-2指纹图像的四种区域
2.1.1图像归一化
对指纹图像进行分割处理,消除剩下的背景区域前,首先要进行图像归一化。
对采集好的指纹图像进行归一化处理,是对指纹灰度图的灰度均值和方差做一次调整,使得不论用什么设备采集的指纹图像都可以有预期的方差和均值,从而屏蔽不必要的噪声。
指纹归一化不改变指纹质量,只是方便指纹的后续处理并保证程序运行时收敛加快。
由于不同指纹区域的手指压力和强度不同,所以将指纹分为W*H小块,设图像中像素点的灰度值为I(i,j),归一化后的图像G(i,j)来表示,灰度平均值和方差分别用
和
来表示,则归一化算法如下[4]:
(1)先计算出图像灰度的平均值和方差:
(2-1)
(2-2)
(2)指定期望的图像方差和平均值后,算出归一化后的图像G(i,j):
(2-3)
其中
,
为期望的平均值和方差(一般
=150,
=2000)。
Matlab程序见附录A。
图2-3归一化图像
2.1.2图像分割的方向法
这一方法是基于指纹方向信息的分割方法,它是利用了指纹的脊线和谷线所蕴藏的平行方向信息来分割的,该方法的优点是:
适合有污渍的指纹,但缺点是因为依赖脊线的方向,所以脊线不连续时将被识别为背景区域,难以取得满意效果。
且计算复杂,处理时间很长,不适宜实际使用。
2.1.3图像分割的方差法
方差法[5]:
传统的分割算法都是基于图像局部灰度方差的分割方法(即方差法),一般地,目标区域中指纹脊和谷的灰度差是较大的,因而其局部灰度方差也较大;对于图像背景区域,方差值则是较小的。
基于这一基本特性,可利用图像的局部方差对指纹图像进行分割。
该方法的优点:
算法简单,计算速度快,如果采集到的指纹质量好,则分割效果不错;缺点:
对质量较差的指纹,该方法分割效果不是很理想,如当指纹背景区域有污渍时,这些区域的方差也比较大,用方差法分割时就不能被有效地分割出去。
改进后的方差法:
为了解决上述问题,可以在方差法分割的基础上进行开运算和闭运算操作,该算法继承了方差法的优点且又克服了易受噪声影响的缺陷。
把指纹的图像分成3*3块,将归一化处理后的图像进行分割的具体算法步骤如下:
(1)利用式(2-1)和式(2-2)对指纹的小块求灰度平均值和方差,设定一阈值T,因为是3*3模块,所以是在8邻域中,即T=4,若
>4,则该小块作为目标留下,并把该块标示为1,存放于矩阵A中;若
<4,则该块作为背景去掉,并把该块标示为0,同样存在矩阵A中;
(2)以
作为结构元素对已知的二值矩阵A做开运算,可得到矩阵B;
(3)以
为结构元素对二值矩阵B做闭运算,得到矩阵C,矩阵C为一个二值矩阵(只包含1和0),对应元素为1的作为目标留下,对应元素为0的作为背景去除。
该算法的第
(1)步与方差法的算法一致,第
(2)、(3)步骤利用数字图像处理中的开运算与闭运算处理,其原理为:
开运算(先腐蚀后膨胀)用来消除小物体、在纤细点处分离物体,去除被误当成目标的背景块;闭运算(先膨胀后腐蚀)用来填充物体内细小空洞、连接邻近物体,恢复指纹背景中被误当成背景而去除的目标块。
Matlab程序见附录A。
结果图如下:
图2-4图像分割
2.2图像的二值化
2.2.1方向图
因为许多二值化算法和增强滤波算法都用到了方向图,因此方向图的计算对后续的各种算法都有很大帮助。
指纹图像有着自己独特和固有的特征,其中指纹的方向性、纹理性都很强,可以看作是一个流状模型,该模型可以用方向图来具体表示。
方向图描述了指纹图像中的像素点、小块指纹所在处的脊线或谷线的切线方向,因为指纹图像在一块不大的区域内的指纹方向几近相同,因此在计算中,一般以该点所在的小块方向来代替该像素点的方向。
为方便认知,以指纹图像为模板,画一环形区域来表示指纹,其中,扇形区域中的小块表示指纹被分块后的小块。
全局信息如下图2-5所示:
图2-5指纹小块模型
方向图计算的基本思想:
在原灰度的指纹图像中计算每小块在每个方向上的统计量,由这些统计量在每个小块方向上的差异来确定该小块的方向。
2.2.2指纹图像二值化
二值化就是将图像上的像素点的灰度值设置为0或1,也就是将整个图像呈现出明显的黑白视觉效果。
指纹图像中包括目标和背景还有众多噪声,要想从原始的指纹图像中提取出目标,一般用的方法是设定一个阈值T,用T将图像中像素数据分成两部分,若输入灰度图像的函数为:
(2-4)
通过求解阈值T,从而把图像f(x,y)分成目标和背景两个区域,其中大于T的像素群为目标区域,小于等于T的像素群为背景区域,阈值的选取原则是:
(1)尽可能的多保存图像信息;
(2)尽可能的减少噪声。
本文将讨论两种二值化方法,选取其中一个作为效果最好的算法。
2.2.3静态阈值二值化
静态阈值二值化是根据灰度图像的直方图为整幅图像来确定一个阈值,也可以根据相关经验来确定阈值,阈值的确定一般分为两种:
(1)人工设定阈值:
该方案是根据实验或经验设置一个固定的阈值,然后对每个像素按照式
来进行二值化处理。
(2)按照直方图确定阈值:
利用原灰度图像分部的直方图来确定,设灰度值f取值是0~255之间的整数,f=0为黑色,f=255为白色,
表示灰度值为k的概率,
表示灰度值为k的像素的个数,n为像素的个数。
则有公式如下:
(2-5)
通常以
为纵坐标,
为横坐标的图像为指纹灰度图的直方图,该算法的直方图有两个峰值,对应目标和背景,阈值取双峰的波谷的值,且双峰越陡,二值化效果越好。
该算法速度快,简单且易于理解,但效果较差。
2.2.4基于方向场的二值化
采集到的指纹图像一般都有比较清晰的方向场,方向场估计得准确与否直接决定了图像二值化算法的效果。
为估计方向场,我们把指纹脊线的走向分为如下8个方向,如图2-6所示:
图2-6一个像素处的8个指纹脊线方向
我们先对分割后的图像进行了平均滤波,然后对图像的每一个像素,为确定在该像素处的脊线方向,在以该像素为中心的9*9窗口内,分别计算8个方向上的经过处理后的灰度值,即将图2-6中数字1到8的位置的像素灰度值去除其中最大summax和最小值summin,若满足最大的summax和最小的summin与4*I(x,y))之和大于(3*summ/8),则该像素点的脊线方向为summin,否则为summax.确定完脊线方向后再由该方向场对图像进行二值化。
二值化的matlab程序见附录A。
结果如下:
图2-7指纹二值化
2.3指纹图像的滤波
一个优秀的指纹识别系统不仅需要高的识别准确度,还需要高的识别速度,而影响识别速度的最主要因素就是指纹图像的滤波,而滤波的好坏直接因素是增强滤波的算法,当然跟所使用的软件和硬件也有很大的关系。
图像在当前的采集设备条件下,不可避免的会受到环境和自身因素的影响,指纹图像质量低的主要原因有:
(1)存在擦伤或创伤的伤痕所引起的脊线中断或变的不清晰;
(2)指纹干燥所引起指纹图像印痕模糊,导致脊线和谷线的对比度比较差;(3)污渍导致指纹图像的脊线或谷线粘连和断裂。
这些图像噪声对后续的指纹提取带来很大的困难,因此必须要在指纹二值化和细化之前进行图像增强滤波,图像增强的目的:
减弱原始图像的噪声,增强脊线和谷线的对比度,即修补指纹图像脊线中断裂的部分,去除指纹图像中脊线或谷线的叉连部分,从这些原指纹图像中尽可能多的获取清晰的指纹纹路结构,以保证指纹提取的可靠性。
指纹图像的增强滤波有很多的算法,本文就一种图像滤波器算法进行阐述。
上下文滤波器:
该算法也是基于脊线纹路和纹理的方向图的,但是这种算法比较简单且效果良好,使用时用的滤波器要根据具体的某一块指纹脊线的方向从一系列的滤波器中选择一个合理的滤波器来对要进行滤波的指纹进行滤波,其它块的指纹图像滤波则可以通过已用过的滤波器旋转得到。
一个基本增强滤波器主要由可将脊线中的断点连接起来的平均滤波器和可将脊线分叉点去除的分离滤波器组成。
指纹图像中脊线的一个周期(即一脊一谷)可以决定增强滤波器的大小,一般地周期T=5,本文中选择5*5的滤波器,平均滤波器在水平方向上的权值可以用下图2-8来表示。
图2-8平均滤波器水平方向权值图2-9分离滤波器水平方向权值
(其中A>B>C>=0;P+2Q+2R=0)。
二值化后的指纹图像通过平均滤波器的处理,其每一点灰度值由它临近的二十四个(因为是5*5的滤波器)像素的灰度值决定,因此可以用下式来对f(i,j)(第i行和第j列的灰度值)进行处理[9]:
(2-6)
平均滤波的原理如下:
对于脊线中的断点我们采用平均滤波器。
断点处脊线的灰度值要比周围的灰度值小,经过平均滤波器的处理,它的灰度值就大约等于周围的灰度值,因此二值化后的指纹中断裂的脊线就会被连起来。
对于脊线中的分叉点我们采用分离滤波器。
脊线中叉连点的两端灰度值比中间的要稍微大一些,经过分离滤波器的处理,叉连点处的灰度值就会降下来,脊线中的叉连点就会被去除了。
脊线的断裂和叉连点如图2-10所示:
图2-10断裂与叉连
因此选择增强滤波器的时候必须要具有类似平均滤波器和分离滤波器作用的增强滤波器,分离滤波器的权值可以用下图2-9来表示,并且可以得到一般滤波器的权值如图2-11。
图2-11上下文滤波器的权值
参数满足K=A+P,L=B+Q,M=C+R。
上下文滤波器中的平均滤波器起到了去除空洞的作用,分离滤波器起到了去除毛刺的作用。
算法实现的matlab程序见附录A。
结果如图2-12和图2-13:
图2-12去除毛刺
图2-13去除空洞
2.4图像细化
分割和滤波后的指纹图像再进行二值化处理后,脊线仍然有一定的宽度,指纹识别的匹配是只利用图像的点或线的特征,这些点或者特征只与脊线的走向或者纹理有关系,有一定宽度的二值化图像显得有些多余,所以需要对二值化图像进行细化处理,指纹二值化图像经过细化处理即可得到一个单一像素宽度的脊线,经过上述的细化处理,在后续的指纹特征提取和特征匹配的算法中大大的减少了计算的冗余量和出错率,使得指纹识别的速度和准确度有了很大的提高。
细化目的是在不破坏指纹图像连通性的情况下去除掉多余的信息(即多余的像素点),将二值化的指纹图像的脊线采用逐层剥离的方法,将图像中的指纹脊线细化成单象素宽(实际为保存原图的骨架)。
一个好的指纹细化算法必须在不破坏指纹纹理性和连通性的情况下细化成单像素脊线。
总体来说,细化算法应满足
(1)尽量保持原图像的基本机构特性(如脊线的形态);
(2)尽量以脊线的中轴线或者指纹的中心为重心;(3)从指纹脊线的两面对称的删除;(4)保证细化完后的指纹图像是单个像素的;(5)对边缘上噪声不应该敏感;(6)算法简单且实用。
2.4.1快速细化算法
快速细化算法的原理为先判断出指纹的边缘,并沿着脊线的边缘对称的逐步删除像素,直至删除的剩下单个像素。
该算法速度快但不彻底。
它的算法为
(1)遍历整个指纹的图像,找出指纹图像脊线的边界点(图2-14中的X的八邻域为
到
)。
脊线上每一点的八邻域,脊线端点的八邻域中只有一个目标点,脊线连续点的八邻域有两个目标点,分叉点有三个目标点,且每点八邻域最多只有三个目标点,符合上述条件的才为单像素宽。
图2-14X点的八邻域
(2)当X点周围的点多于三个目标点时,将多余的点删除,依次删除到剩下三个时判断该点是否为分叉点,不是再删除,剩下两个点时,判断是否为连续点,不是时删除,当为一个点时不删除。
(3)循环寻找,直到没可删除的点为止。
2.4.2改进的OPTA算法
常用的传统细化算法还有OPTA算法[10](基于模板的图象细化算法),原理为构造两个模板:
一消除模板和一保留模板,将指纹图像二值化后与这两个模板相比较,来决定是否删除该像素,本文研究的是改进后的OPTA算法,改进后的OPTA算法的优点是消除了原OPTA算法算法中两种模板不一致的问题。
本算法采用统一的4*4模板,消除模板有八个,保留模板有六个,模板的结构如下图2-15,图2-16,图2-17所示。
图2-15OPTA算法的改进模板(4*4)
图2-16消除模板(八个)
图2-17保留模板(六个)
改进后的OPTA算法的细化原理:
从图像(类似于4*4的模板中)左上角开始进行,图中的各个像素(如图所示的元素,用P表示)抽取如图2-15所示的
总共十五个相邻像素,其中的八个相邻的像素(
,
)与图2-15所示的消除模板(八个)相比较,若都不匹配,则P保留,否则将抽取出来的元素和图2-16的保留模板(六个)相比较,若与其中的一个匹配,则保留P,否则应该将P删除。
重复利用以上的操作,将所有图像中的像素值进行比较直至不变为止。
此算法是八连通的算法,基本都能够保证单像素的宽度。
但该算法却不能使分叉点处彻底
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指纹识别 算法 matlab 实现