用FPGA实现优化的指纹识别预处理算法

文章正文
发布时间:2024-07-27 18:27

指纹识别作为生物识别的一种,因其具有唯一性和稳定性,在身份识别上有着其他手段不可比拟的优势。随着指纹传感器性能的提高和价格的下降,指纹的采集越来越容易,指纹识别算法也已比较成熟。传统的指纹识别系统一般以PC机和DSP为主要处理平台。随着人们对便携设备的安全性要求越来越高,传统的处理系统在功耗和处理速度及实时性上已经不能满足需要。

指纹识别系统在很大程度上依靠指纹图像的质量。在实际应用中由于采集条件和采集设备的因素,采集到的指纹质量比较差,含有大量噪声,容易导致很多问题,影响后续处理的效果。所以在对指纹特征提取前,必须进行一系列的预处理,改善输入指纹图像的质量,为后续处理奠定基础。

本文在进行多方面比较和论证的基础上,选取较优化的预处理算法,作为FPGA指纹预处理平台的算法。并用FPGA实现所选算法。

1 处理步骤

本系统采用XILINX公司Spartan 3E系列FPGA作为核心控制芯片,通过富士通公司的MBF200指纹传感器实现对指纹图像的采集,利用CPLD进行接口传输。FPGA通过读取SDRAM中的指纹数据,在其逻辑单元中进行灰度值归一化、图像分割、滤波、二值化、细化等,从而获得重要的指纹图像信息,以便与指纹模板库进行对比。系统模块图如图1。图2是采集到的指纹图像。


本文引用地址:


2 灰度值归一化


指纹图像归一化的目的是把指纹图像的平均灰度和对比度调整到一个固定级别上,以减少不同指纹图像上的差异。归一化并不改变指纹脊线和谷线的清晰度,只是消除样本采集因外界因素造成的影响,为后续处理提供统一规格的图像。

把图像分为w×w的子块,对于每一子块求其灰度均值Mi和方差Vi。子块灰度均值和方差的计算如下:




用FPGA实现上述算法的难点在于计算Var0。而计算期望的关键是求得每个像素的概率,即求子块中每个像素出现的次数。考虑到FPGA的硬件结构采用并行比较的方法可以方便求出I(i,j)的概率,本次设计w取为3。实现模块采用图3所示。

3 图像分割

图像识别的基础是图像分割,其作用是把反映物体真实情况的、占据不同区域的、具有不同特征的目标区分开来,并形成数字特征。图像分割的好坏直接影响后续图像处理的效果,甚至决定其成败。分割算法至今已有上千种,每年还有不少新算法出现,然而大都基于图像在像素级的两个性质:不连续性和相似性。

笔者研究了Mehtre等提出的基于脊线方向的局部直方图的分割方法;Rarha,chen和Jain提出的根据垂直于脊线方向的灰度方差区分前景与背景的方法;Maio和Maltoni提出的利用每一子块的平均梯度来分割指纹图像的前景与背景等多种方法。在此基础上选择图像分割的经典方法——自适应的局部阈值图像分割方法。该方法在合理选取阈值T的情况下,能较好地对图像进行分割[5]。

但该算法本身没有给出T的取值大小,所以对原算法进行改进后描述为:

(1)将待处理的图像分成W×W的子块(根据实验选取W=8或16,对一般和较湿的图像选为8,较干的选为16)

(2)求各块图像灰度值的标准方差:


式中G(m,n)表示块内各点的灰度值,Aver(i,j)表示某一块的均值。

(3)根据式(4)确定阈值T

其中a是调整系数,其值的选取根据图像的质量而定,一般可取为10~20,对质量较好的图像,a可取12左右,对较湿的图像可取下限,对较干的图像a取上限或更大。若a取得过大,则无法消除指纹区域外的噪声点(背景被误判为前景),若a取得过小,则会造成区域内脊线断裂(前景被误判为背景),分割后的指纹图像如图4。

4 滤波

由于分割后的图像质量仍然不是很好,所以需要对其做进一步的处理,以使指纹图像清晰,消除不必要的噪声,以利于进一步的辨识。本系统采用中值滤波作为图像预处理常用的方法,能有效地去除噪声,平滑图像。较之其他平滑滤波的方法如均值滤波等,中值滤波能够在去噪的同时不模糊图像的边缘,较好地保持图像的清晰度。

图像中值滤波的定义:

其中g(x,y),f(x,y)为像素灰度值,即把f(x,y)领域的所有像素灰度值排序,求其处于中间位置的值代替f(x,y)。滤波窗口可以有各种不同的形状,如线状、方形、圆形等。本系统采用的是3×3的窗口。为了突出FPGA快速计算的优点采用如图5所示方式[6]。


图6输入为以f(x,y)为中心的9个数据,A1、A2、A3、A4是3个比较器,输出的值分别是第i-1行3个值、第i行3个值、第i+1行3个值的中值。以这3个中值再输入A4就可以选出9个点的中值。这样大大提高了算法的效率。



5 二值化

经过中值滤波后的指纹图像首先进行二值化变成二值图像,才能进行细化处理。由于采集到的指纹图像不同区域深浅不一,如对整幅图像使用同一阈值进行二值分割,会造成大量有用信息的丢失。这里使用自适应局部阈值二值化的思想,对每块指纹图像,选取的阈值应尽量使该块图像内大于该阈值的像素点数等于小于该阈值的像素点数。算法流程如图7。


T为该块指纹图像的平均灰度值,Nh、Nl分别为第(k,l)块指纹图像中灰度值≥T和

6 细化

现有的细化算法存在很多问题,如细化不彻底、纹线吞噬、骨架偏离纹线中心等。本设计在对快速细化和改进的OPTA细化算法分析研究后,设计一种改进的细化算法。该算法与传统的细化算法相比不破坏纹线的连接性,不会引起纹线的吞食,保护了纹线的特征。算法的主要思想是:利用快速细化算法速度快的优点对指纹图像进行一次细化。由于细化后的纹线大多不是单像素宽,再利用改进的OPTA细化算法对不是单像素宽的纹线进一步细化。算法的描述:

(1)遍历整个指纹图像,找出纹线的边界点。

(2)判断该边界点是否应该删除。对边界点P定义2个特征变量nsum和tsum:


如果P点同时满足:tsum=2且nsum≠1,nsum6,则可将其删除。

(3)继续寻找下一个边界点,直到没有可删除的点为止。

(4)得到的纹线很多不是单像素宽,从图像的左上角开始扫描,每个像素(图为P)均抽取出图7所示的15个相邻像素,把其中的8个相邻像素(P1~P8)与图9的消除模板比较,如果都不匹配,则P保留。

(5)重复上述过程,直到没有一个像素值被改变为止。

细化算法的硬件设计:细化算法的难点在于快速细化后的图像和模板比较。这次设计的主要思想是把模板图变为数据流,只有用二进制数据流的方式才便于做比较。如图10所示,黑色代表1,白色代表0。以第一行最左边的模板为例,即可变为000 111 010。考虑到FPGA的结构,用并行语句让输入的9位像素数据和模板二进制化数据进行关系运算操作,即可并行地和12个模板比较,大大提高了运算速度。FPGA模板匹配仿真图如图11,细化后的指纹图像如图12。





实验结果表明,用FPGA完全能满足指纹预处理的要求,而且提高了运算速度。FPGA的低功耗特点使其在便携式设备上具有广阔的应用前景。