本系统使用FPS200指纹传感器获取指纹图像。FPS200是电容式固态指纹传感器,采用CMOS技术,获取的图像为256×300像素,分辨率为500 dpi。该传感器提供三种接口方式:8位微机总线接口、集成USB全速接口和集成SPI接口。本系统采用集成SPI接口。指纹采集的程序流程是:首先初始化FPS200的各个寄存器,主要是放电电流寄存器(DCR)、放电时间寄存器(DTR)和增益控制寄存器(PGC)的设置;然后查询等待,指纹被FPS200采集进入数据寄存器后,通过DMA存入内存。
由于从指纹传感器采集到的指纹图像数据在80 KB左右,以DMA方式存入片内RAM。Nios II对指纹图像数据进行处理后,生成指纹特征模板,在指纹登记模式下,存入片外Flash中;在指纹比对 模式下,与存储在Flash中的特征模板进行匹配,处理结果通过LCD和七段LED显示器输出显示。
本系统的硬件平台主要是在Altera的Nios II Cyclone嵌入式开发板上实现,选用Altera的Cyclone版本的Nios II开发套件,包括Nios II处理器、标准外围设备库、集成了SoPC Builder系统设计工具的QuartusII开发软件等。系统的主要组件Nios II的标准内核、片内存储器、SPI、UART、DMA控制器、并行I/O接口、Avalon总线、定时器等都集成在一块Altera的Cyclone FPGA芯片上,使用SoPC Builder来配置生成片上系统。
SoPC Builder是功能强大的基于图形界面的片上系统定义和定制工具。SoPC Builder库中包括处理器和大量的IP核及外设。根据应用的需要,本系统选用Nios II Processor、OnChipMemory、Flash Memory(Common Flash Interface)、SPI、JTAG UART、DMA、Interval timer、LCD PIO、Seven Segment PIO、Avalon TriState Bridge等模块。对这些模块配置完成后,使用SoPC Builder进行系统生成。SOPC Builder自动产生每个模块的HDL文件,同时自动产生一些必要的仲裁逻辑来协调系统中各部件的工作。 2.3 使用Nios II的定制指令提高系统性能 使用Nios II的定制指令,可以将一个复杂的标准指令序列简化为一个用硬件实现的单一指令,从而简化系统软件设计并加快系统运行速度。Nios II的定制指令是与CPU的数据通路中的ALU相连的用户逻辑块。其基本操作是,接收从dataa和/或datab端口输入的数据,经过定制指令逻辑的处理,将结果输出到result端口。
在指纹识别算法中,对指纹图像的处理数据运算量大,循环数目多;而Nios II的定制指令个数已增加到256个,可以使用定制指令完成许多循环内的数据处理,从而加速数据处理的速度。 在对指纹图像的处理中,频繁地用到坐标转换,将图像的二维坐标转换为一维的存储地址;通过定制指令来完成坐标的转换,用一组易于用硬件实现的位移和加法运算替代乘加运算,可将转换时间缩短1/3。在方向图计算中,要进行离散反正切变换,使用优化过的用硬件实现的定制指令来替代C语言中的atan函数,更可以将变换时间缩短到原来的1/1000。
定制指令逻辑和Nios II的连接在SoPC Builder中完成。Nios II CPU配置向导提供了一个可添加256条定制指令的图形用户界面,在该界面中导入设计文件,设置定制指令名,并分配定制指令所需的CPU时钟周期数目。系统生成时,Nios II IDE为每条用户指令产生一个在系统头文件中定义的宏,可以在C或C++应用程序代码中直接调用这个宏。
3 系统软件的设计与实现
本系统的指纹图像处理及识别算法采用C语言在Nios II IDE中实现。指纹识别算法的流程如图4
所示。 背景分离是将指纹区与背景分离,从而避免在没有有效信息的区域进行特征提取,加速后续处理的速度,提高指纹特征提取和匹配的精度。采用标准差阈值跟踪法,图像指纹部分由黑白相间的纹理组成,灰度变化大,因而标准差较大;而背景部分灰度分布较为平坦,标准差较小。将指纹图像分块,计算每个小块的标准差。若大于某一阈值(本文取20),则该小块中的所有像素点为前景;否则,为背景。
方向图是用纹线的方向来表示原来的纹线。本文采用块方向图,将源指纹图像分成小块,使用基于梯度值的方向场计算方法,计算出每个小块的脊线方向。
图像增强的目的是改善图像质量,恢复脊线原来的结构;采用方向滤波,设计一个水平模板,根据计算出的方向图,在每个小块中将水平模板旋转到所需要的方向进行滤波。
图像的二值化是将脊线与背景分离,将指纹图像从灰度图像转换为二值图像。
二值化后的图像经过细化,得到纹线的骨架图像。细化采用迭代的方法,使用ZhangSuen并行细化算法,可对二值图像并行处理。
特征提取阶段,选择脊线端点和分叉点作为特征点,记录每一个特征点的类型、位置和方向信息,从而得到指纹的特征点集。但由于在指纹扫描和预处理阶段会引入噪声,产生大量伪特征点,因此需要进行伪特征点的去除。去除伪特征点后的特征点集作为特征模板保存。
特征匹配阶段采用基于特征点的匹配算法,通过平移和旋转变换实现特征点的大致对齐重合,计算坐标变换后两个模板中的特征点的距离和角度。如果小于某一阈值(本文的距离和角度阈值分别取5个像素和10°),则认为是一对匹配的特征点。计算得出所有匹配的特征点对后,计算匹配的特征点占模板中所有特征点的百分比S。根据系统的拒识率(FRR)和误识率(FAR)要求设置阈值TS。如果S大于或等于阈值TS,则认为是同一指纹;否则,匹配失败。
结语
本文提出了一种基于Nios II嵌入式处理器软核的自动指纹识别系统实现方法。使用Altera的Cyclone FPGA实现,且具有开发周期短、成本低等特点;同时,采用Nios II的定制指令来提高系统性能,利用硬件实现算法速度快的优点,使以Nios II处理器为核心的系统能够快速地完成大量数据处理。
参考文献 1 Frank Vahid,等. 嵌入式系统设计.骆丽等译. 北京:北京航空航天大学出版社, 2004
2 任爱锋,等.基于FPGA的嵌入式系统设计.西安:西安电子工业大学出版社, 2004
3 Nios II Custom Instruction User Guide. www.altera.com
4 Vizcaya P, Gerhardt L. A nonlinear orientation model for global description of fingerprints. Pattern Recognition, v. 29, no. 7
5 柴晓光,等.民用指纹识别技术.北京:人民邮电出版社,2004
[此贴子已经被作者于2005-11-16 14:30:34编辑过] |