(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)脊线长度匹配
对于上面的函数即可找出细化图像中的特征点和一段脊线,沿着该段脊
26
线走向,每隔五个像素测量一下,看到到原始端点的距离,此段距离由一distance函数得到。
函数结果会得到一数组(内有脊线的长度信息)。如果两幅指纹细化图像中的纹路是相同的,则它们就包含相同的端点和交叉点及用distance函数找出的相同的一段脊,则这两个指纹图像中的长度数组对应的位置比例会基本相等(我们选择的指纹图像大小基本相等,因此该比例选1),因此函数最终定义了一个数f=(sum(abs((d1./d2)-1))),其中若f的值越接近于0,这两幅图像的匹配度就越高,在一定范围的阈值内我们可以认定为匹配。
(2)三角形边长匹配
找到一个指纹细化图像的特征点后,可以找出距离这个端点距离最近的两个端点或者交叉点,与这个指纹图像细化的特征点构成一个三角形,若两幅图像中的边长比例基本相等(原理同上,也选1),则说明这两幅图像匹配,越接近于1说明这两幅指纹图像越匹配。其中设置一find_point函数来找出距离最近的端点或交叉点。
函数最后定义了一个数ff=(sum(abs((dd1./dd2)-1))),因此ff值越接近于0,这两幅指纹图像的匹配度越高,在一定范围的阈值内我们可以认定为匹配。
(3)点类型匹配
找到一个指纹细化图像的特征点后,在该端点周围找到四十个端点或者交叉点,统计在这四十个特征点中端点的个数和交叉点的个数。若有两幅指纹细化图像中的端点所占的比例近似相同,则两幅图像相匹配,越近似,则越相同。函数最终定义了一个数fff=abs(f11-f21)/(f11+f12),所以fff值越接近
27
于0,这两幅指纹图像的匹配度就会越高。我们也设定一阈值,在此阈值内都可以认定为匹配。
本文中取r=8,num=60,经过试验,得到f的阈值为0.5,ff的阈值为1.5,fff的阈值为0.2。即两幅图像的f,ff,fff若均小于阈值,则两幅图匹配;若三个值中有至少一个值大于阈值,则不匹配。验证如下: 一、选择两幅图:zhiwen.bmp和zhiwen5.bmp来验证
图 3-1(a) 输出的时间
图 3-1(b) 特征匹配
通过以上的f,ff,fff和阈值的比较说明zhiwen.bmp和zhiwen5.bmp匹配,为同一手指的指纹,匹配时间为12.514525秒。 二、选择两幅图:zhiwen.bmp和zhiwen2.bmp来验证
28
图 3-2(a) 输出的时间
图 3-2(b) 特征匹配
通过以上的f,ff,fff和阈值的比较说明zhiwen.bmp和zhiwen2.bmp不匹配,为同一手指的指纹,匹配时间为12.728871秒。
29
总结与展望
该论文是在前人研究的基础上,参阅了部分资料,并在刘文博老师的指导下认真完成的,文中主要对指纹图像预处理的各个步骤做了较为详细的讨论,并用matlab加以仿真和验证。
论文中的算法基本上能够实现指纹识别的预期目的,但是由于毕业设计的时间较短以及我的知识面的限制,有许多问题的考虑还不全面,有待于进一步完善。
本文中主要对图像预处理进行了分析比较,最后得到了一套比较合适的算法,但通过实验验证可发现比对时间比较长,有待于进一步改进。在指纹特征点的提取和匹配的过程中,均设置了一个函数来实现算法,实现的过程的时间也相对较长,也可以用其他的语言来实现。
30