改进的指纹检测算法的MATLAB 仿真
2023-11-27夏兴国
史 彦,夏兴国
(马鞍山职业技术学院 电气工程系,安徽 马鞍山 243000)
指纹识别是一种基于生物特征的身份认证技术。近年来,伴随着嵌入式计算技术的迅速发展及其价格优势的不断提升,指纹识别应用日益广泛,不仅可用于手机、笔记本电脑等各种数字设备,也应用于刑侦、IT、医疗、金融等众多领域。这表明了指纹识别技术有着广阔的发展空间,也对其提出了更高更新的要求。开发高效准确的指纹识别算法成为当前的研究热点之一[1]。
为提高指纹识别的准确度和速度,提出一种指纹特征点判定的新思路:采取一种8 邻域算法提取指纹的特征点,再建立数学模型,完成指纹图像的二值化和细化,并去除伪特征点。采用MATLAB软件,选择斗形纹、箕形纹、弓形纹、双龙纹等四种指纹进行仿真分析,以检验算法的可行性,为提升指纹识别的准确性与可靠性奠定基础[2]。
1 指纹识别系统组成及原理
指纹是手指末端皮肤上不平整所形成的纹路,这种纹路被称为“脊”和“谷”。虽然指纹很小,但是其中包含的特征信息量很大,指纹特征是指纹识别的依据。指纹的局部特征也称细节点,按美国标准化组织分类标准,分为脊末梢、分岔点、复合特征和未定义四种。由于人的指纹细节点稳定而不同,所以利用指纹就可识别不同的人。根据指纹细节点进行模型匹配是目前最常用的指纹识别法,分为脊末梢识别和分支点识别两种[3]。
图1 给出了一种以点模式匹配为基础的自动指纹识别系统(Automatic Framework Identification System,AFIS)的基本流程。
图1 指纹识别系统组成及流程
首先,由指纹采集装置将指纹转换成数字图像,一般为一幅灰度图。在进行数据采集时,由于手指按压的力度不同,或手指、采集仪器上有污垢等,难免引起图像数据噪音。其次,为使图像更清晰,便于进行特征提取,需要对采集的图像过滤和增强,并进行二值化和细化处理。在此基础上,再对图像进行特征提取,剔除伪特征值,得到可用于匹配的细节点。最后,将提取的特征点和模板中的特征点进行比对,完成最终的指纹匹配和识别[4]。
2 指纹图像采集与预处理
2.1 指纹图像采集
人类的遗传基因决定了指纹的复杂性和唯一性,虽然没有完全相同的两枚指纹,但指纹形状还是有相似性,可分为四类。为便于进行指纹图像处理,采集斗型纹、箕型纹、弓型纹和双龙纹四种类型的指纹图像如图2 所示。
图2 指纹类型
2.2 指纹图像预处理
为确保正确、高效地获取指纹原图特征,需进行指纹图像预处理。指纹图像预处理是指纹特征提取和精准匹配的前提,其处理结果直接影响识别的最终效果。
对采集的指纹图像进行预处理,主要是增强指纹中山脊和山谷之间的对比度,去除指纹中的点状断裂和指纹叉的连接现象,删除伪特征点,以改善原始指纹图像质量,得到清晰的指纹点状图,获取新指纹图像。指纹图像预处理过程如图3。
图3 指纹图像预处理过程
2.2.1 归一化处理
在获取和加工指纹时,由于图像的灰度不均匀,难以建立一个统一高效的识别体系,给后续的图像处理与分析带来困扰。归一化处理就是将两幅原图进行对比度和灰度调节,使其达到相同的级别,为后续处理打下基础[5]。具体实施方法是:
设N×N 为整幅灰度图像尺寸,M 为其平均值,设置方差为V,由公式
得到规格化公式(2),再由式(2)进行归一化处理。
式(2)中,i,j 是节点编号,M0是预期均值,V0是预期方差,Mi是每个指纹实际使用的均值,Vi是每个指纹实际使用情况的方差。
2.2.2 图像分割
因为指纹图像背景的灰色区域和指纹区域的方差不同,所以可结合平均值方差算法分割指纹图像。首先将图像进行分块,再对分割的每个指纹块进行方差计算,分割出指纹前景和背景,然后对分割出的前景图像进行处理[6]。具体步骤如下:
1)设置M 为阈值,将图像分割为N×N 块。
2)设置N=40,计算每个图像块的平均值,
在式(3)中,Ave 是每部分的平均值,f(x0,y0)是图像各点的灰度。
3)若N≥M,则将该块选作背景,否则为前景,再将方差不为0 的区域进行分割。
2.2.3 方向滤波增强处理
对指纹图像进行滤波的方法分为两类:一类是在空间域上进行增强,即直接对图像上各像素点进行处理,常用方法有方向加权中值滤波、基于规则的图像增强、基于模糊逻辑的图像增强以及Gabor 等;另一类是在频率域上进行增强,常用方法有小波变换和Fourier 变换。为了对分割后的指纹图像进行滤波增强,可采用改进的基于空间域的均值分离滤波器方法。此方法比其他方法速度更快,复杂度更低,且可更加高效地填充空洞和断纹。由于均值分离器仅对某一局部进行增强,因此,在进行方向滤波时,需要对图像进行分块滤波处理。分块尺寸取决于图像大小,其目标是保证各子块的纹线方向基本平行[7]。各子模块的过滤处理过程如下:
1)计算子模块方向。常用的方向场计算法有掩模法和公式法两种。在此采用公式法,即基于最小均方估算法,表示为公式(4)和(5)。
其中,∂x(i,j),∂y(i,j)是各像素梯度的横坐标和纵坐标,可用sobel 算子求取;γx和γy是各个块的方向。
采用MATLAB 中的函数fspecial(′sobel′)和imfilter(I,h)求取像素梯度。
2)设计相应的滤波器。为获得较好的增强效果,经试验,选取7 ×7 的均值分离滤波器模板,获得其水平方向滤波器为:
非水平方向可通过模板旋转得到,二次线性插值法是获取滤波器最理想的方法。
3)采用imfilter(I,h)函数实现滤波器对该块的增强。
4)进行归一化。如果滤波后的像素灰度是非整数,或不在(0,255)范围内,则对其进行归一化处理。
2.2.4 二值化处理
将上述滤波后的图像进行二值化处理。先将图像分为A,B 两种像素,再设置阈值T。根据公式(6)进行二值化。
式(6)中,“1”是目标,“0”是背景。再根据全局Q 参数法提取指纹轮廓,步骤如下:
1)设指纹图像的脊线占整幅图像的比例为Q,灰度分布为Qk(k=0,1,2,…,255),有
式(7)中,Nobject为脊线的像素点总个数。
式(8)中,Nimage为指纹图像总像素点个数。
2)计算Qk(k=0,1,2,…,255),
3)计算Ma和Mb,
式(10)(11)中,Na、Nb分别为A、B 的像素。A 和B之间的方差为:
4)A、B 方差以0~255 为周期进行计算。T 为最有效的分割阈值,当方差最大时,对指纹图像进行二值化,取
2.2.5 细化处理
经二值化处理的指纹图像线条仍具有一定宽度,且像素较多,不能准确寻找特征点,会影响后续匹配,故还需要进行精细处理。对细化处理后的指纹线条减少像素宽度,可有效减少计算量,提高速度[8]。
细化处理是在不改变纹线连通性的前提下去除指纹线条的边界点,直至线条宽度为单个像素。细化后的图像既以纹线骨架为中心,又不影响收敛性和快速性。综合已有算法,提出一种改进的细化方法,以获取较理想的细化图像,步骤如下。
1)获取初步细化图像。由于原始图像很多线条特别是三叉处线条宽度均为非单线条,需要加以细化,给后续建立细节特征模板打基础。
2)在初图基础上进行细化,方法如下:
(1)如图4 所示,从最上方的像素点开始顺时针方向对每个像素进行8 邻域编码。
图4 像素8 邻域编码
(2)纹线上一般有三种情况:一是端点情况,在8 邻域内有1 次像素点值改变;二是连续像素点情况,在8 邻域内有2 次像素点值改变;三是三叉点情况,在8 邻域内有3 次像素点值改变。在第二种情况下,若8 邻域不在四个角上,两个目标像素间隔了一个非目标像素,则定义此点为非目标像素点。在第三种情况下,满足(P2+P4+P6==3‖P4+P6+P8==3‖P6+P8+P2==3)时,要删除这一像素点,有四种情况需要再次细化处理,如图5 所示。
图5 需要再次细化的情况
3 指纹特征的提取与细化去伪
3.1 提取细节结构特征
通过局部特征更能分辨两枚指纹是否来自同一人,所以需提取局部特征点。通常情况下,提取特征点的方法有两种,一是在经过灰度处理后的图像中直接提取特征点,二是在经二值化及细化处理的图像中提取特征点[9]。前者可避免复杂的图像预处理过程,但对原始图像要求极高,而实际难以得到极为清晰的原始图像,因此不常用。反之,后者尽管前期的预处理复杂些,但得到的特征点会更加准确,更适用于指纹局部特征点的提取。
经预处理的图像仍存在大量伪特征点,大部分分布在图像边缘。这些图像经预处理后,仍具有许多经典影像的特性及不足。由于伪特征点十分接近,且在很小区域内存在多个伪特征点,因此主要通过计算特征点距离去除伪特征点,设点P1和P2的距离为D(P1,P2),
伪特征点可划分为两类,即位于图像边缘和图像内部的伪特征点。前者是由于截断图像产生不连续点造成的,后者是由于采集指纹时手指的汗渍、疤痕和按压轻重不同等各种噪声影响而产生的,表现为部分纹线的不正常连接、断裂等。大量的伪特征点会对下一步的匹配算法产生很大影响。对初选出的特征点,计算其与边界的距离,当距离小于预先设定的阈值时(这里取值36),则认为该特征点不可靠,从指纹特征中删除该点记录[10]。
3.2 功能点的提取
为了在二值化及细化后的图像中提取特征点,建立3×3 模板,对中间点P 及周围的8 邻域像素点计数,8 个邻域像素点的灰度值从0~1 或从1~0 的次数记为Cn(P),
式中,P9=P1,8 个邻域像素点中灰度值为1 的像素点个数为Sn(P),
针对像素点P 的不同状态计算Cn(P)和Sn(P),通常可分为端点、连续点和分叉点。判断所有的端点与分叉点,得到检测结果,完成特征点的提取。
3.3 指纹匹配
指纹采集时,手指按压时的位置、方向和力度不同,会导致同一手指的两幅样本指纹图像形变,不易成功识别,需通过指纹特征模板匹配算法解决。指纹特征模板匹配是将提取的指纹特征点和已建立的数据库的某一指纹特征点集合进行比较,判断两者的相似程度。一般用代价函数或匹配能量表示相似度。设置合适的相似度阈值可以判断两个指纹特征是否来自同一手指[11]。
4 指纹图像特征提取和匹配实验结果分析
4.1 指纹特征提取的实验结果与分析
将MATLAB 作为仿真平台,对指纹库中200幅指纹图像进行预处理,并进行特征提取,处理过程和实验结果如图6 所示。
图6 指纹特征提取处理过程与结果
图6 中:a)是原图像归一化结果;b)是图像分割结果,其区分了前景和背景;c)是经滤波和增强的效果;再进行二值化得到d);细化后得到e)。由e)可见,经预处理后,原始指纹转换成了线图指纹,图像的主要轮廓得到了保留。特征点存在于线图中,去除大量虚假特征点,得到提取结果如f)。
仿真结果表明,被处理的指纹图像中,92 %可获得良好的效果。
4.2 指纹匹配的实验结果与分析
根据指纹识别过程和指纹的整体结构特征,采用模板匹配分类器将指纹分别归属至不同的预设类别,再进行指纹匹配。设计实现步骤如下:
1)找出指纹图像中的全部端点及交叉点,并用坐标表示图像中各像素点的8 个相邻位置。在此基础上,从图像中任意选择一个端点,在8 个邻域按顺序进行两两相减,计算绝对值并求和,以判断此点为端点或交叉点。
2)去除毛刺。找到指纹图像的端点,沿指纹纹线的方向向上进行5 个像素的位移,若在移动中出现交叉点,就可视为毛刺,将其去除。
3)删除位于该图像边缘上的端点。
4)找出并提取指纹图像的特征点。
5)进行指纹匹配。若两张指纹图像中的端点或交叉点数量占比大致相同,则认定为匹配成功,否则提示来自不同的手指[12]。
建立MATLAB GUI 界面,用改进算法对指纹库中的指纹图像进行训练,并与传统算法进行比较,结果如表1 所示。由表1 可见,改进算法的识别精度达99 %,与传统的特征点不去伪提取算法相比,识别率更高,运行时间更短。大量的测试表明,改进算法可快速准确地对指纹进行识别。
表1 改进算法与传统算法比较结果
5 结束语
指纹识别技术应用于刑事侦查等比较特殊的高端领域时,往往要处理一些质量较差的指纹图像,传统识别算法无法满足其应用要求,需要改进识别算法以改善所采集的指纹图像质量。在对全局特征和局部特征进行详尽描述的基础上,提出用改进的邻域算法提取指纹图像特征点,并消除伪特征点。通过MATLAB 软件对斗型、箕型、弓型及双龙型等四种不同类型的指纹进行仿真研究,结果表明,改进的指纹识别算法可减少后期匹配工作量,降低识别错误率,方法可行,效果达到预期。