基于FPGA的指纹识别系统的设计与实现
指纹识别作为生物特征识别的一种方法,在身份识别上有着其他识别方法不可比拟的优越性:指纹具有唯一性、终生不变性、难以复制、易获取等优点。传统的指纹识别系统基于PC机,虽然系统的识别速度快,样本存储量大,但存在结构体积大、成本高、移动性能差的缺点;采用DSP组成的识别系统又存在外围电路复杂、设计开发时间长、系统可扩展性差的问题。
本文给出了一种基于Xilinx公司FPGA的指纹识别系统设计方法。利用Xilinx公司的EDK和SG(System Generator)开发软件,创建配置MICOBLAZE软核,并添加自定义指令与系统逻辑相结合构成完善的SoPC系统[1]。该方法采用硬件实现图像的预处理以及识别的部分算法,具有灵活的设计方式,可裁剪、可扩充,并具备系统软硬件可协同设计的特点,极大地提高了处理速度,满足了系统的实时性要求。
1 指纹识别的基本原理
指纹识别是指从已得到的指纹数据库中查找出与输入指纹相同的指纹数据,达到识别输入者身份的目的。指纹识别系统主要包括指纹的采集、指纹图像预处理和特征提取、特征模板存储、指纹图像的特征匹配以及输出显示匹配结果[2-3]。指纹识别系统的基本原理框图如图1所示。
2 指纹识别系统设计
2.1 系统硬件总体设计
系统主要实现指纹的录入和识别。先通过指纹传感器获取指纹图像信息,再由指纹处理模块进行图像的预处理、特征提取等相关操作,最后保存到存取单元中建立指纹库。识别时,同样通过指纹传感器录入待识别的指纹,再经过指纹处理模块完成图像处理以及特征提取,然后将提取出的指纹信息与指纹库中信息进行匹配,显示匹配结果。
识别系统由指纹传感器、系统控制模块、指纹处理模块、存储模块、通信接口模块、输入输出模块等部分组成。指纹的采集通过指纹传感器完成,将指纹转换成具有一定灰度级的数字图像。在控制模块的作用下,通过接口电路的控制,将录入的指纹图像输入至识别系统。
指纹处理模块主要完成指纹的预处理和指纹的特征提取功能。而输出模块则负责显示输入的测试者信息及指纹的比对结果。
存储模块分为静态存储器RAM和闪存Flash。其中静态存储器RAM作为系统存放临时数据的单元;闪存Flash用于存放控制系统建档后的指纹数据和识别比对程序。
控制系统用来协调各个外设的工作,实现状态的控制以及设备间的数据通信等操作。主要操作包括:电路的输入信号、对指纹传感器的启动、指纹数据的读取、指纹图像的处理以及数据的存储、匹配和结果的输出。
2.2 系统软件总体设计
根据系统的设计要求,需要建立相配套的指纹识别库并对需要识别的指纹进行识别。设计中将预处理过程中耗时较大的部分用FPGA实现,将处理过程复杂的运算用软件编程的形式实现,最终由MICOBLAZE软核完成软件的执行以及软硬件之间的协调。指纹识别系统的软件运行流程如图2所示。
3 指纹识别系统的设计与实现
3.1 指纹传感器的设计与实现[4]
指纹采集卡是指纹识别系统硬件的重要组成部分,由指纹传感器及其外围电路组成,其功能是采集指纹纹理图像。本系统采用美国富士通公司的MBF200电容指纹采集传感器实现对指纹图像的采集。该指纹传感器最大优点是在保证指纹图像高分辨率的同时减少了传感器的尺寸。
MFB200芯片内置的SPI接口可以极大地降低芯片对硬件的依赖,只需要5条信号线就可以与微处理器通信,因此使用SPI接口方式将MBF200作为从设备与FPGA相互连接。
3.2 控制模块的设计与实现
协调各个指纹处理子模块的运行,实现各个指纹处理子模块与系统片内MICOBLAZE嵌入式处理器以及存储设备之间的通信,是控制模块的主要功能。
设计时指纹控制模块预留PLB总线主从端口各一个。在MICOBLAZE处理器通过指纹采集器取指纹图像数据,存储到静态存储单元RAM后,处理器通过PLB总线访问指纹控制模块的总线从端口,设定控制模块的操作地址和操作类型。完成配置后,控制单元获得总线使用权,通过主端口发送相关指令给图像处理模块,让其根据处理器规定的处理方式,从给定的地址单元取出图像数据进行处理。最后将处理完成后的新数据存储到片内的FLASH或存储器中。
3.3 指纹图像处理模块的设计与实现
指纹图像处理模块包括:图像的预处理和图像的特征提取两个子模块。这些模块的计算量大,但是算法不是很复杂。为了提高对图像信息的处理速度,将这些处理过程用硬件实现,即通过System Generator完成该模块的硬件电路设计。
图像预处理子模块包括:平滑、锐化、二值化以及细化四个部分[5]。指纹图像平滑处理是指纹预处理的第一步。考虑到在去除输入噪声的同时要较好地保证图像的清晰度,本模块采用了中值滤波的方法。中值滤波器的定义如式(1):
其中g(x,y),f(x,y)为像素的灰度值,即把f(x,y)领域所有像素灰度值排序,求处于中间位置的值代替f(x,y)。在SG中实现框框图及平滑后的指纹图像如图3所示。
经过平滑处理后的指纹图像会变得模糊,通过图像锐化技术,使图像的边缘、轮廓线以及图像的细节变得清晰。模块采用Sobel微分算子进行锐化处理,处理模板如式(2)所示:
在SG中实现框框图及锐化处理后的指纹图像如图4所示。
图像的二值化,就是把灰度图像转变为黑白相间的二值图像,由于采集到的指纹图像在不同区域深浅不一,如对整幅图像使用同一阈值进行二值分割,会造成大量有用信息的丢失。故二值化子模块使用自适应局部阈值二值化的思想[6-7],既将图像分割成多个小块,对每个小块进行分别计算,局部阈值的选取参考局部块的各个像素,而且选取的阈值应尽量使该块图像内大于该阈值的像素点数等于小于该阈值的像素点数,从而保持大量有用信息。在SG中实现框框图,及二值化后的指纹图像如图5所示。
细化是把清晰但纹线粗细不均的二值指纹图像转化成线宽为一个像素的条纹中心点线图像的过程,以便后续的特征提取过程能精确定位。细化算法中将OPTA算法进行了优化,即满足收敛性、连续性、拓扑性和保持性,又能在三叉点处完全细化,使图像平滑,保护纹线的特征。
在图像的特征提取个子模块中,结合细化图像的特点,不对纹线做任何修复处理,在细化指纹图像上直接提取原始细节特征点集。在SG中实现框框图及二值化后的指纹图像如图6所示。特征端点用‘O’标注,特征分叉点用‘+’标注,中心点用‘*’标注。
3.4 指纹识别系统的软件设计与实现
软件设计包括:各个系统外设的驱动程序,去伪特征点程序以及特征点匹配比对程序。通过C语言完成这些程序的编写,然后通过EDK中自带的嵌入式编译器SDK完成相关的调试。最后可以将编译好的BIT文件下载到FPGA中,完成相关的功能。由于本文讨论的是SoPC的设计,在这里就不做详细介绍。
- 基于DSP CCS 2.2实现指纹识别预处理系统(07-28)
- 基于FPS200传感器和DSP的指纹识别系统(01-12)
- 基于嵌入式Linux平台的指纹门禁系统(01-20)
- 基于DSP CCS2.2实现指纹识别预处理系统设计(06-10)
- 基于DSP CCS2.2实现指纹识别预处理系统设计方案(06-17)
- 基于DSP的指纹识别系统设计方案(07-03)