一种基于方向场的指纹图像滤波算法
2011-03-06帅仁俊
潘 静,帅仁俊
(南京工业大学电子与信息工程学院,江苏 南京 211816)
0 引言
指纹特征是人终生不变的特征之一,而且不同人的指纹特征相同的可能性几乎为零,由于指纹鉴定花费小,效果好,因此指纹鉴定作为身份鉴定的一种方法有广泛的应用前景,如案例分析、银行存取款、汽车锁、进人特殊环境等。但是,指纹比较即使对指纹专家来说也是一个繁锁而又枯燥的工作。有关部门迫切需要计算机的帮助来完成指纹比较工作,所以实现一个指纹自动识别系统[1]是非常必要的。
这里主要讨论的当中预处理的部分,指纹图像预处理可分为滤波、二值化、细化,不过在这些步骤之前,要对指纹图像进行归一化[2-3]。
基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响。也就是转换成唯一的标准形式以抵抗仿射变换图像归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的不变量,便于后续步骤的处理。
图1 自动指纹识别框
其中 M0、V0为期望平均值和期望方差,通常由图像采集时的分辨率确定。一般分别都取125。V、M分别为图像自身的均值和方差[4]。表示为:
1 基于方向图滤波的算法描述
1.1 方向图求取
方向图有两种,一种是点方向图,表示原指纹图像中脊线的大致方向[5]。具体做法是:在每个点的处取8个方向,在每个方向上左右各取4个点,共8个点,分别计算这8各点的灰度平均值分别计算出这 8个点和上步的平均值的差的绝对值,将他们加起来,和存入矩阵S.比较S矩阵中的每各方向上的s值,值最小的,即该S所对应的方向即是该点的方向。
另一种是块方向图,表示源指纹图像中每一块脊线的大致方向。考虑到相邻几点方向不会相差太大,所以直接算块的方向。具体就是算 3×3矩阵的中心点方向即代表该块的方向,从而大大减少了运算量。具体还是要算点的方向,在每个先取8个方向,如图1示。
图2 每个点的8个方向
式中,f(i,j)为点P(ij)的灰度值Ω为此方向上各个点的灰度平均值。
滤波结果应与原图的平均灰度无关,因此模板中所有系数的代数和应为零。点(i,j)的灰度值由其周围的48各点的灰度值共同决定[6],水平方向系数矩阵B如下式:
这个滤波器可以连接脊线中出现的断点,且可以去除图像中的叉连现象,x、y、z、u 满足 u>x>y>=0,z>0 且u+2x+2y-2z=0。可以看出越靠近该点的象素对该点的影响越大。实际上使用的滤波矩阵B是右上角的矩阵。
有了水平方向上的滤波矩阵后,现要求的是其他方向上的 7×7滤波矩阵,求方向上的矩阵已归结为求点(k,l)和点(m,n)关系的问题,如图4示。
要求基于方向上的点的坐标,即是由水平方向的点旋转角度a所得到的。用向量的知识可以解决此问题:向量m+jn=(k+jl)(cos a+j sin a)=(k cos a-l sin a)+j(k sin+l cos a)。所以旋转后的点(m,n)和原来的点(i,j)坐标关系为:m=k cos a-l sin a;n=k sin a+l con a。两个点相对位置关系如图2。令k l从-3到3循环,可得到点(i,j)周围的7×7矩阵I的坐标及其灰度。由于点(i,j)的灰度是由周围48个点的灰度决定的如下面的公式:
图3 旋转后的点和原来点的位置关系
2 二值化
指纹图像的二值化就是通过设定阈值(threshold).把它变为仅用两个灰度值分别表示的前景和背景颜色的二值图像。图像的二值化可以根据下面的阈值来处理:
假设一副图像的象素值为I(i,j),设有一阈值T,则:
2.1 动态阈值法
动态阈值法仅是一个变换,在一个n×n的方块中先求出此方块内象素的平均灰度值,所有具有灰度值超过平均灰度的置为0,低于平均灰度的置为125[7],二值化流程如图4。
图4 二值化流程
3 细化
指纹图像二值化后,纹线仍具有一定的宽度,而指纹识别只关心纹线的走向,并不关心它的粗细,应对指纹图像进行细化处理。细化还可以减小数据量,提高识别准确性。细化时应保持纹线的连接性、方向性、特征点不变,还应保持纹线的中心基本不变。
图像细化算法的种类很多,但一些经典的细化算法用于指纹纹线细化处理时,往往会引起较明显的纹线吞食现象或骨架位置发生偏移等问题,并不能达到满意的效果,因此应该根据指纹纹线的特点有针对性的设计细化算法。
3.1 基于OPTA算法的改进算法
此方法即是对每个点取其附近的 15个点,它们的位置如表1所示。
模板分为删除模板和保留模板,对任意一个黑像素点,先将它于删除模板相比较。若不符合,则保留该像素。若符合,则再于保留模板相比较,若符合,则保留。否则删除该像素点,将该像素点灰度置 0。这样得到的只是初步细化后的结果,理论上要重复上述过程,直到没有象素值被改变为止,实际上只要细化足够多次以后就可以了。
4 实验结果
其中图5(a)图为原图,图5(b)为滤波之后的图。可见滤波能明显滤除原图像中的离散点,图像也比原来的清晰了很多。图5(c)为二值化之后的图像,二值化采用的是动态阈值法,对原指纹灰度图要求较低,处理的效果也较好,算法的复杂度一般,容易编程实现。图5(d)为细化后的指纹图像,细化过程中已将特征点标出,其中叉点表示分岔点,圈点代表端点[8]。
5 结语
指纹图像预处理是指纹识别的基础,这一步结果的好坏直接决定着指纹识别的质量。在现行的算法的基础上,提出了一种有效的指纹图像预处理的算法。所有算法均经过Matlab仿真,取得了较好的效果。
[1] 徐国辉.指纹识别技术产品的开发与进展[J].通信技术,2009,42(08):88-90.
[2] 罗希平,田捷.自动指纹识别中的图像增强和细节匹配算法[J].软件学报,2002(05):946-956.
[3] 刘福元,王玲.自动指纹识别算法研究[J].信息安全与通信保密,2007(02):70-72.
[4] 王莹,苏成利.指纹图像增强算法研究[J].科学技术工程,2010(01):94-97.
[5] 周媛媛,张成,林嘉宇.指纹图像的预处理算法[J].计算机应用,2004(06):34-36.
[6] 王科俊,李雪峰,赵玥.基于方向滤波的指纹图像增强算法研究[J].模式识别与仿真,2009(07):54-56.
[7] 苑玮琦,夏义勇.方向滤波指纹图像二值化[J].仪器仪表学报,2003(4增):469-471.
[8] 冯国进,顾国华,张保民.指纹图像预处理与特征提取[J].计算机应用研究,2004(05):183-185.