基于DSP的自动指纹识别系统
3 指纹识别算法设计概述
原始指纹图像通常含有较多噪声,因此需要进行预处理来改善图像的质量,以便进行特征提取和比对。预处理包括方向图计算、图像增强、二值化及去噪、图像细化及去噪。
由于指纹的纹线具有缓慢变化的特点,在局部通常具有明确的方向性,所以可以利用方向图对图像进行平滑和锐化处理。沿纹线的切线方向对图像进行平滑,以起到连接不应有的间断的作用:沿纹线的法线方向对图像进行锐化,以突出纹线的边缘信息。二值化就是把8灰度的指纹图像变成0和255的二值图像。二值化后的图像通常在脊线上会有白色的斑点,程序上使用种子填充法把斑点去掉。为了进一步压缩数据,需要对二值化图像进行细化处理。细化时应保持纹线的连接性、方向性不变,还应保持纹线的中心基本不变。细化后的纹线会出现搭桥及豁口,因此必须进行细化后的去噪工作。预处理中各步骤的图像如图4所示。
设计中使用纹线端点和分叉点作为指纹特征点,这不仅是因为这两类特征点出现的几率最高且容易检测,更重要的是它们足以描述指纹的唯一性。程序中使用纹线跟踪方法提取特征点,其中纹线端点的属性由横纵坐标和纹线角度来表示;分叉点的属性由横纵坐标,纹线角度和三个分支间的夹角(从大到小)来表示。在提取出指纹特征点后,便会得到一组矢量点,同样在指纹模板库中保存的指纹模板也是一组矢量点,要判断两个指纹是否相同的问题也就转化成判断两组矢量点是否相同的点模式匹配问题。
javascript:window.open(this.src);" style="cursor:pointer;"/>
4 识别算法在DSP上的实现
程序设计上使用混合语言编程,用C语言设计程序中对运行时间影响不大的模块,而用汇编语言设计严格要求实时性的核心算法。为达到最佳利用DSP资源的目的,在程序的设计中要注意以下几个方面:
(1)VC5402指令集中提供了一些零开销的循环指令,如RPT和RPTB等。为进一步提高效率,在执行循环指令时,应充分利用辅助寄存器和累加器。数组尽量用寄存器间接寻址,中间变量尽量存放于累加器中,以尽可能地减少中间变量存放所消耗的时间。
(2)VC5402采用流水线结构,允许多条指令同时访问CPU资源,从而提高系统的执行速度。但当CPU的某一资源同时被流水线的几个阶段访问时,就会发生流水线冲突。因此,必须通过合理的调整汇编程序的代码顺序或加入适当的NOP指令来解决这一问题。
(3)识别算法中涉及到了卷积和乘累加操作,这可以通过使用循环寻址功能和乘累加指令来实现。另外,VC5402提供了可延迟的转移、调用和返回指令。这些指令的执行时间比它们对应的非延迟指令要少2个周期,需要注意的是有时要在延迟指令后插入NOP指令,以保证适当的操作顺序。
(4)在涉及数字信号处理算法时应尽可能地使用DSPLIB库中的函数,因为这些函数均用汇编语言编写,优化程度很高。另外,在C程序中尽可能地采用内联(inline)函数,以便提高代码的集成度。由于采用混合编程方法,因此在程序设计上要严格遵循函数调用规则和寄存器的使用约定。
5 结束语
本系统采用TMS320VC5402完成了从指纹图像的采集到特征匹配的功能,并结合DSP的结构特点和相应的指令详细的阐述了系统硬件设计和程序的优化。实践证明本系统工作稳定、实时性好,具有很强的实用性和指导性。