1 绪论
1.1指纹识别的历史与发展前景
19世纪初,科学研究发现了至今仍然承认的指纹的两个重要特征,一是两个不同手指的指纹纹脊的式样(radge pattern)不同,另外一个是指纹纹脊的式样终生不改变。这个研究成果使得指纹在犯罪鉴别中得以正式应用。主要代表性的事件有:1896年阿根廷首次应用,然后是1901年的苏格兰,20世纪初其他国家也相继应用到犯罪鉴别中。20世纪60年代,由于计算机可以有效的处理图形,人们开始着手研究利用计算机来处理指纹。从那时起,自动指纹识别系统AFIS (Automated Fingerprint Identification System)在法律实施方面的研究和应用在世界许多国家展开。
20世纪80年代,个人电脑、光学扫描这两项技术的革新,使得它们作为指纹取像的工具成为现实,从而使指纹识别可以在其他领域中得以应用,比如代替IC卡。现在(90年代后期),低价位取像设备的引入及其飞速发展,可靠的比对算法的发现为个人身份识别应用的增长提供了舞台。
相对于其他身份鉴定技术,指纹识别技术之所以优于其他身份鉴定技术而被广泛采用的原因:
1.指纹是独一无二的,两人之间不存在着相同的指纹:
2.指纹是相当固定的,不会随年龄、健康状况的变化而改变;
3.指纹样本易于采集,难以伪造,便于开发,实用性强;
4.每个人十指的指纹皆不相同,可以利用多个指纹构成多重口令,提高系统的安全性;
5.指纹识别中使用的模板并非最初的指纹图像,而是由图像提取的关键特征,使所需存储的信息量减小,而且在实现异地确认时,可以大大减少网络传输负担,支持网络功能。
可以看出,指纹识别技术相对于其他识别方法有许多独到之处,具有很高的实用性和可行性。因此,指纹识别成为最流行、最方便、最可靠的身份认证方式,己经在社会生活的诸多方面得到广泛应用。
1.2指纹识别中的基本概念与技术困难
指纹图像其实是比较复杂的,它有着许多不同于其他图像的特征。与人工处理不同,现代的生物识别技术并不直接存储指纹的图像(一是考虑到隐私权,二是由于储存空间),而是记录从指纹源图像中提取到的特征,指纹识别算法最终都归结为在指纹图像上找到并比对指纹的特征。我们定义了指纹的两类特征来进行指纹的验证:总体特征和局部特征。总体特征是指那些用人眼直接就可以观察到的特征,包括:基本纹路图案:环型(loop),拱型(arch),漩涡型(whorl)。其他的指纹图案都基于这三种基本图案。仅仅依靠图案类型来分辨指纹是远远不够的,这只是一个粗略的分类,但通过分类使得在大数据库中搜寻指纹更为方的,这只是一个粗略的分类,但通过分类使得在大数据库中搜寻指纹更为方便。指纹图像类别比例是这样的:漩涡型(包括whorl double whorl)占27. 9%,环型(包括right loop, left loop)占65. 5%,拱型(包括arch, tented arch)占6. 60I0。
目前指纹识别技术还有很多困难。例如:当三维的指纹被指纹录入设备扫描成二维的数字图像时,会丢失一部分信息、,手指划破、割伤、弄脏、不同干湿程度以及不同的按压方式,还会导致指纹图像的变化,这给可靠的特征提取带来了相当地困难。例如传统的基于细节点的识别方法,是依靠提取指纹脊线上的细节点,然后对其位置和类型进行匹配,来识别指纹的(详细描述在第三章中),而噪声会影响特征提取准确度,增加错误的特征点或丢失真正的特征点。当噪声很大时,就要增加图像增强算法来改善图像的质量,但很难找到一种增强算法能够适应所用的噪声,多种增强算法又会大幅增加算法运行时间,不好的增强算法又会增加人为特征。当噪声增大时,提取了许多虚假细节点,还有可能丢失细节点。这就是传统的基于细节点识别算法的不足之处之一,因为它只利用了指纹图像中的一小部分信息—细节点位置和方向,作为特征进行匹配,丢失的蕴涵在图像中的其他丰富的结构信息。不难想象,基于这种方法的识别算法,很难全面适应指纹的变化。
1.3系统总体设计方案和论文结构
硬件平台大致可以分为5个部分:成像系统(传感器FPS200)、核心部分(AT89S51单片机)、RAM、EEPROM等器件。
工作原理:指纹经传感器采集后,由传感器直接转成RGB格式,并且数据传输到MCU。MCU需要执行大量的模式识别和图像处理相关计算。固化的程序存储在EEPROM中,这些指令控制了整个指纹识别系统的工作流程。RAM为内存存储临时数据。这就构成数据通道。
在指纹算法方面,研究了基于细节点特征指纹自动识别系统的各部分构成以及指纹图像的预处理和细节特征提取。
文章第一部分首先介绍了基于细节点特征的指纹识别系统的构成及原理。重点研究了其预处理过程,其中包括指纹图像预滤波、方向图计算、基于方向图的指纹图像滤波和指纹图像二值化。最后介绍了对二值化后的指纹图像细化的方法。
第二部分介绍了硬件系统的结构,如:单片机的连接方法,外设寄存器选取,串口通信的实现等等 。
第三部分介绍了指纹识别系统的软件流程及与PC机接口通信的实现。
2 纹图像处理及特征提取与实现
2.1 方法概述
特征提取 |
基于细节点特征的指纹自动识别技术是目前这方面研究中的主流,这种系统的实现有以下一些步骤如图2.1:
预处理是将输入的(直接采集进来的)低质量、有噪音的指纹源图象处理成已细化了的清晰的二值图像[1]。它的目的是减少低质量的图像对分类识别结果的影响,预处理中一般包括图像增强、滤波、二值化、细化等步骤。预处理的方法通常有两种:
方法一:先求方向图,后求频率图,最后由此得到的Gabor滤波器对图像进行滤波。这种方法计算量比较大,在求频率图容易产生偏差,不利于单片机的实现。
方法二:结合指纹图像自身的特点以及其源图像像素来确定该点是否为脊,直接准确地得到黑白二值的指纹脊图像。这种方法对于从不同渠道获得的图像均有不错的效果。
在以上两种方法都要用到方向图,方向图是一种可直接从原灰度图像中得到的有用信息,在预处理、特征提取、指纹分类中有着重要意义。我们总是在准确求得方向图的基础上运用各种滤波方法或直接找脊的方法来进行预处理。
方向图描述了指纹图像中每一像素点所在脊线或谷线在该点的切线方向,也可看作是指纹源图像的一种变化表示方法,既用纹线的方向来表示该纹线。方向图分为两种:一种是点方向图,表示源指纹图像中每一点脊线的方向:另一种是块方向图,表示源指纹图像中每一块脊线的大致方向。计算方向图的基本思想是:在原灰度图像中每一点(或每一块在各个方向上的某个统计量(如灰度差、梯度等),根据这些统计量在各个方向上的差异,确定该点(块)的方向。
2.2方向图的计算
设是指纹图像中点的灰度值,要计算该点的方向,需要先求出(该点临域沿d方向的灰度变化)。
图2.2点方向示意图
=, d=1,2,···,N (2.1)
其中:是方向d上的第k个点;
是该点的灰度值,N是所取的方向数,n为每个方向上所取的邻点数。这两个数的具体取值与图像的分辨率有关,一般取N=16,即取16个方向,n=8,即一个方向上取8个邻点。
点的方向为取值最小的方向。对图像中的每一点求取点方向,这样便形成了指纹点方向图。
此方向求得的方向特点:
1.方向取值不是0~2中的任意值,而是有限的几个数。
2.这种方向计算出的方向范围是0~2,有利于求取指纹的走势。(与认为是不同方向)
把点方向图分成大小的块,对每一块计算方向直方图(横坐标的方向取到的N个值,纵坐标为取这些方向的象素个数),方向直方图中的峰值所对应的方向,即该块的方向。
代表指纹图像在处的灰度值步骤:
1.将图像分成大小为的块。这里M的大小以包含一脊一谷(即一周期)为宜;
2.计算块中每个像素在x轴和y轴上的梯度和。
这里用简单的梯度算子:
=
(2.2)
(2.3)
3.用下面公式计算块的方向,
且 (2.4)
当的块中或为零的比率很大时,块方向应直接设为0或,这样块中的每一个像素的方向都等于。
(A)原始图像 (B)改进前的结果 (C)改进后的结果
图2.3 指纹图像的方向图
4.在计算指纹图像方向图多采用块与块直接不重叠的方式,但这样求出的块方向仅由该块所包含的像素点所决定,没有考虑其周围像素点的影响,很容易造成方向的不连续性。
于是我们采用在计算方向图时,采用块重叠的方式。这样可以使方向图精度可以大大提高。
5.方向图平滑
这里我们采用将方向图正交分解后分别进行滤波的方法对它进行平滑,实验证明这种方法比一般用的中值滤波和加权平滑的方法的效果好。
计算步骤:
1) 将方向图转变为连续的向量场:
(2.5)
(2.6)
这里,分别是向量场x,y方向上的分量。
2) 实现低通滤波:
(2.7)
(2.8)
这里W是一个大小为的二维低通滤波器,一般使用的均值滤波。
3)平滑后的方向场为:
(2.9)
2.3指纹图像的滤波
在指纹处理中用到滤波器,主要在于去除图像噪声,增强图像质量,即增强指纹脊与谷的对比度,修补图像——连接脊中出现的断点、去除图像中的叉连现象。
指纹图像滤波有两种方法:
方法一:利用Gabor滤波器的参数可利用指纹的方向性和纹理性,用Gabor滤波器来作为带通滤波器,去除噪音,增强脊谷结构。这种算法难点在于需要计算图像的频率图——将指纹图像看成由脊和谷组成的周期图像,在每一个局部领域内都会有一个相对固定准确的频率。这种算法的缺点在于:求频率图导致计算量比较大,而且频率容易产生偏差;
方法二:这种方法也是我们采用的滤波方法。这是一种简单但效果良好的上下文滤波器,上下文滤波法也是基于方向图的,这是一系列上下文相关的滤波器,使用时根据某一快的方向从一系列滤波器中选择一个相应的滤波器来对这一块进行滤波。其他方向的滤波器可以通过旋转得到。
一个基本的滤波器由两部分组成:平均滤波器和分离滤波器。平均滤波器的作用主要是连接边中出现的断点,而分离滤波器可以去除图像中的叉连现象。(断裂和叉连的情况;如I右图2. 4所示)。
滤波器的大小由指纹图像中脊线的周期决定,在我们的试验中,周期取为5,因而这里以Sx5大小的滤波器为例。水平方向的平均滤波器的权值如右图2.5所示,其中系数满足:。
经过平均滤波器过滤的图像,其中每一点的灰度由其临近的24个像素的灰度值共同决定。即对于第i行j列的点的灰度值的处理如下:
图2.4断裂与叉连 图2.5平均滤波器的权值
(2.10)
若图像中出现断点,即这一点的灰度值比周围点都小得多,则经过平均滤波器的处理,它的灰度值就接近邻近点的灰度值了,所以平均滤波器有连接断点的作用。 分离滤波器的权值如图2. 6所示,其中参数:P+2Q+2R=0。分离滤波器处理图像过程与平均滤波器相同,图像中的叉连点是把相邻的两条脊线连接起来的点,所以叉连点的上下点灰度值较大,而其同一行上的邻点的灰度值较小,通过分离滤波器的处理,叉连点的灰度值会明显降低,所以分离滤波器有去除叉连点的作用。
一个基本滤波器要求具备上述两种功能,它的作用相当于平均滤波器加分离滤波器,所以它的权值如右图2. 7,其中参数:K=X十P,L=Y+Q, M=Z+R。为归一化权值,基本滤波器的每个权值都需要除以该滤波器所有权值的总和。
图2.6分离滤波器的权值 图2.7基本滤波器的权值
用方向滤波器进行滤波去噪时,根据块方向图中的该块的方向,选用相应的滤波器(将水平方向的滤波器旋转块方向的角度后得到),进行滤波。
2.4基于方向图的动态阀值指纹图像二值化方法
二值化是指纹图像预处理中必不可少的一步。常用的二值化方法有固定阀值法、自适应阀值法、局部自适应阀值法等,这些方法仅仅利用了图像的灰度信息,对指纹图像的二值化效果很不理想;现有的大部分指纹图像预处理方法都是经过滤波处理后再进行二值化,这样就需要对图像进行两次扫描,不利于处理速度的提高。
将指纹图像自身的方向结构特点与源图像灰度值变化特点结合起来,确定对图像中每一像素点二值化的动态阀值。这种方法取代了一般指纹图像预处理中无效区域分割、滤波、增强、二值化等步骤,一次完成图像的二值化功能。实验结果也表明,该方法得到的二值化图像能够基本保持源图像上的特征点不丢失,确保了以后的特征提取和比对的正确性和可靠性。指纹局部图如:
(A) 原始图像 (B)谷脊变化波形图
图2.8指纹谷脊变化波形图
方框Y方向是该块的指纹方向,x方向是其法线方向。以法线方向上各像素点的灰度值做一曲线,可得到近似于正弦的波形图,如图2.8(B)所示。显然,该波形图的波谷对应指纹图像的脊线(指纹图像中暗的纹线),而波峰则对应指纹图像的谷(指纹图像中亮的纹线)。若所考察的当前像素点恰好落在波谷上,则该点就是指纹脊线点,若所考察的当前像素点恰好落在波峰上,则该点就是指纹谷点,而谷点到脊点间像素灰度的变化几乎呈线性,正是基于指纹图像在结构上和像素灰度变化上的这些特点,本文提出了下述指纹图像二值化方法:
1.将图像分成大小为N×N的小块,用上述方向图改进方法计算各小块的方向;
2.对图像中的每一点,以其所在块的方向作为该像素点的方向,并以该点为中心在其法方向上取(一般为奇数)的矩形窗,计算矩形窗内指纹方向每一列中像素点在法方向上的加权平均,具体公式为:
(2.11)
其中coefficent为加权平均系数,满足 ,是k列上的第d个像素的位置。
3.对中极大点或极小点附近的波动做平滑处理;
4.找出极大点和极小点位置及对应的值,对极大值极小值求平均,将此平均值作为该点二值化门限,称其为动态阀值。
5.将当前像素点的加权平均灰度值(即)与动态阀值进行比较,若小于动态阀值,同时,当前像素点在波形图极小点一个有限的邻域内,则当前像素点为脊线点,否则即为谷点,即:
(2.12)
其中的取值与指纹读入器的分辨率有关,通常取为指纹周期的四分之一,本文取。
若的起伏很不明显,说明该区域属于无效区域或背景区域,整个区域的像素值置为255。
本算法在具体实现中可利用同一块中所有像素有同样方向的条件,推导出快速算法,防止一些点的重复扫描,大大缩短处理时间。
2.5指纹图像的细化算法
指纹图像二值化后,纹线仍具有一定的宽度,而指纹识别只对纹线的走向感兴趣,不关心它的粗细。为了进一步压缩数据,得到更精确的细节特征,提高识别的准确性,对指纹图像进行细化处理是不可忽略的。
所谓细化,就是从原来的图中去掉一些点,但仍要保持原有的形状。实际上,是保持原图的骨架。
指纹图像的细化是指删除指纹纹线的边缘像素,使之只有一个像素宽度,细化时应保证纹线的连接性、方向性和特征点不变,还应保持纹线的中心基本不变。一种好的细化方法应满足下列条件:
1.迭代必须收敛的。(收敛性)
2.不破坏纹线的连接性。(连接性)
3.不引起纹线的逐步吞食。(拓扑性)
4.保护指纹的细节特征。(保持性)
5.骨架纹线的宽度为1个像素。(细化性)
6.骨架尽可能接近条纹中心线。(中轴性)
7.算法简单、速度快。(快速性)
图2.9 统一模块
下面介绍一种适合于指纹图像细化的算法,这种方法满足上面的细化条件,而且可以提出快速算法。
这种算法采用模板,如图2. 9所示,左上角的方窗(即)为消除模板。即,一黑色象素八临域与消除模板中的一个相匹配的话,该点被认为是可消除的点。
消除模板具体如下:
(A)~(D) 4个模板能有效去除边缘上的突出物,保证了细化后的指纹骨架处于指纹脊线中心,避免了细化后的指纹骨架出现毛刺。
除消除模板外,还需构造保留模板,保持纹线的连通性。
保持模板内容如下图2. 11所示:
具体算法如下:
从图像的左上角元素开始进行,每个像素(图中为)均抽取出如图2. 9所示的15个相邻像素,并且把其中8个邻域像素()与图2. 10中的8个模板比较,如果和8个消除模板中的任意一个都不匹配时,保留;如果与8个中的任一个匹配,则抽取的元素再和图2. 11中的6个保留模板进行比较,如果与其中任一个匹配的话,则保留,否则删去。重复这个过程,直到没有一个像素的值被改变。
这种算法的具体实现可引入查表法,即对所要处理的像素周围模板内前15个点预先进行编码(用双字节15个位来表示,双字节的最低位存放的值,依此类推,次最高位存放的值),把编码值作为存储地址,按上述细化法则,预先在存储地址上存入相应的细化值(可用0, 1表示,0表示保留,1表示删去)。细化时,移动4x4的方窗内象素的编码地址去查找相应的细化值,用细化值替换当前像素值。
2.6特征提取及其后处理
特征提取一般是指提取指纹图像的局部特征,也就是细节点特征。在基于细节点的指纹自动识别系统中,特征提取是在细化后的指纹图像上进行的。
特征提取的首要问题是确定细节点和它的位置,细节点的位置和细节点间的相对位置很重要,尽管每个指纹中包括将近80个细节,只要确定十几个细节点就己经足够用来识别了。
探测细节点的算法很简单,如图2. 12所示的3x3模板就可以用来确定特征的位置。
M是待检测的点,是它的八邻域,沿顺时针方向排列。是细化后图像在处的灰度。如果M是端点,则它的八邻域满足:
, (2.13)
如果M是分叉点,则它的八邻域满足:
, (2.14)
这样我们就可以在细化后的图像中找到细节点(端点和分叉点),并记录它们在图中的相对位置。
这样得到的特征中存在由指纹质量、摄入噪声等原因造成的很多假特征,如下图2. 12所示(a)和(b)中产生了假的端点;(c)和(d)中形成了错误的断开和连接;(e)中显示的是一个由不平滑的脊引起的毛刺,出现了假端点和假分叉两种特征:(f)~(g)是几种错误连接的例子,分别称为桥形、三角形、梯形结构。
图2.12假特征
针对上面这些假特征,我们采用了非常简单的方法:计算特征点间的距离,如果距离值小于所给的阀值,则认为特征点为假特征点。这种算法实现起来也很简单:扫描特征点的某一邻域,如果该邻域中出现其他特征点的话,将该特征点与出现的特征点同时去除,如此循环几次,当没有特征点被删去时,处理完成。
这种方法中邻域的选取很重要,如果取得比较小,则可能起不到去除假特征点的作用;如果取得比较大的话,则可能将真正的特征点也一并删去。在具体实现中,我们取其半径为脊宽的一半。
对每一个细节点,我们记录如下信息:
1.细节点的x,y坐标。
2.细节点的方向,这个方向就是该细节点所在的块的块方向。
3.细节点的类型,即脊线端点或脊线分叉点。
4.细节点对应的脊线。
细节点对应的脊线用该脊线上的采样点来表示,采样的距离约为脊线间的平均距离。分叉点对应的脊线是与该细节点的方向最近的那条,端点对应的脊线就是该细节点所在的脊线。采样点用该点与对应细节点的距离,和连接该点与对应细节点的直线与对应细节点方向的夹角来表示,的取值范围在-180到180度之间。下图给出了细节点对应的脊线与脊线上的采样点的例子。在细节匹配中,对应脊线将被用来对两个平面点集进行校准,而且,校准的参数,也就是两个点集中任意一对脊线间的旋转角度,将被用来作为判断它们所对应的细节点能否看作匹配的细节点的条件。
图2.13细节点的对应脊线
细节匹配一般在极坐标系中进行,因为指纹图像的非线性形变往往呈放射状,在某个区域内的形变比较大,然后非线性地向外扩张,因而,在极坐标中能更好地描述非线性形变;另外,在极坐标中不需要考虑输入图像与模板图像的参照点之间的平移,将一对对应点的坐标相对于参照点转换为极坐标时,平移就被抵消了;还有,在极坐标系中显然比在直角坐标系中更便于处理两幅图像间的旋转[6]。
细节点集的校准:
令 (2.14)
表示模板图像中的M个细节点,
(2.15)
表示输入图像中的N个细节点。
为了把细节点转移到极坐标系中去,需要在模板细节点集和输入细节点集中各选一个参照点作为相应的极坐标系中的原点,并算出其它细节点相对于参照点的极坐标。由于事先不知道模板点集与输入点集的对应关系,需要考虑所有可能的参照点对。
对模板点集中的每一点和输入点集中的每一点,定义为将和当作参照点对时,从输入图像到模板图像的旋转角度。如果,和可以被当作一对对应点,即它们分别对应的脊线相似性到了一定程度,则将取0度到360度间的一个值,否则,我们定义取值为400,以表示和不能是一对对应点。如果和是不同类型的细节点,也就是说它们一个是端点,一个是分叉点,则它们不是对应点对,取值为400。即,表示和对应的脊线相似性到了一定程度。
3 指纹识别系统的硬件设计
3.1功能描述
基于单片机的指纹识别系统是由AT89S51MCU处理器、68128RAM和EEPROM芯片等构成,在无需上位机参与管理的情况下,具有指纹录入、图像处理、指纹对比、搜索和模版储存等功能的智能型模块。它通过与之相配套的指纹传感器,可构成一个独立的指纹识别系统,或作为一个完整的外部设备。
该系统控制的核心是单片机AT89S51,因为通过比较DSP芯片,处理速度较快和存储量较大,但性价比较低。而选取单片机AT89S51主要原因是功耗低、可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,128x8bit内部RAM,能满足设计要求。
工作原理:
当指纹传感器收到指纹信息,将通过串口给单片机发送命令,单片机同意并接收相应的信息,指纹传感器采集的指纹转换成RGB格式,并且数据传输到单片机,单片机通过存储在EEPROM中的固化程序执行大量的模式识别和图像处理相关计算,当用户的指纹被确认,单片机将命令执行机构动作,开关开。
指纹识别模块以MCU处理器为处理中心,基本集成了指纹处理方面的所有过程,具有以下优点:
1.在无上位机(PC或DSP)的情况下,独立完成指纹的录入、图像处理、特征提取、模块生成、模块存储、指纹对比(1:1)或指纹搜索(1:N)等功能。
2.适用面广:提供命令/独立两种工作模式。(上电时,4种组合状态:命令、对比、录入、删除);独立模式适用范围:简单保险柜、房门锁具:命令模式适用范围:较复杂的门禁系统。指纹IC卡的终端机与PC联机的指纹识别及认证系统。
3.2系统硬件结构概述
指纹识别系统主要包括:单片机最小系统、指纹采集部分、串口通信电路、外部存储部分、开关按钮,供电系统组成。其结构框图如图3. 1所示。
指纹识别系统中,单片机采用AT89S51单片机,它是整个控制器的核心部件。MAX232作为接口芯片用于实现指纹传感器串口的RS-232信号与89S51串行口的TTL信号的相互转换[7]。电源部分包括DC+5V及保护电路。
系统结构框图:
3.3 AT89S51单片机的结构与特点
AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及
AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
图3.2 AT89S51单片机的引脚图
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
主要功能特性:
表3.1AT89S51性能特性
兼容MCS-51指令系统 |
4k可反复擦写(>1000次)ISP Flash ROM |
32个双向I/O口 |
4.5-5.5V工作电压 |
2个16位可编程定时/计数器 |
时钟频率0-33MHz |
全双工UART串行中断口线 |
128x8bit内部RAM |
2个外部中断源 |
低功耗空闲和省电模式 |
中断唤醒省电模式 |
3级加密位 |
看门狗(WDT)电路 |
软件设置空闲和省电功能 |
灵活的ISP字节和分页编程 |
双数据寄存器指针 |
3.4指纹识别系统硬件电路设计
图3.3指纹识别系统主电路
本系统采用AT89S51作为指纹识别系统的核心处理器,使用单片机内部的4K程序存储器,接+5V电源。。
复位电路则采用简单RC复位电路,同时又可与一些需要复位的外围电路相连,达到复位与单片机同步。
/EA/Vpp为访问内部或外部程序存储器的选择信号.由于AT89S51单片机有4K的内部程序存储器,又外接了128Kx8的EEPROM存储器,故该引脚必须接+5V高电平./PSEN为外部程序存储器读选通控制信号.此电路中无扩展程序存储器.故该脚悬空.
串口通信接口设计采用MAX232实现TTL与RS-232的转换,实现与计算机通信。指纹识别系统主电路如图3.3
3.5电源电路的设计
当指纹识别系统工作时,需要+5V电源,为了使整个系统结构紧凑,在本设计中,将220v交流电源到+5V直流电的转换电路和识别控制器集成在一块电路板上,其中的电路原理图如图3.4所示。
图3.4 +5V电源电路图
220V市电通过变压器后,得到10伏电源,在电路的输入端与公共地之间,加上经整流后的不稳定直流电压,在输出端便能得到固定的输出电压。为了改善纹波特性,在输入端外接电容,一般取值为0. 33uF,并紧接在稳压块的输入端;在输出端连接电容,这样可以改善输出电压的纹波特性,一般选为0. 1 uF 。输入电压的选择依据是:
式中: ——稳压块允许的最大输入电压;
——稳压块的输出电压;
2V——稳压块输入与输出之间的最小压差。
在输入、输出之间外接二极管D1,可以起到输出端路保护作用,防止输出短路时负载电容向7805放电。
3.6指纹采集器介绍及工作方式
现有技术光学传感器的体积都比较大,而且成像结果也要经过变换才可以使用。本设计采用的是Veridicom公司的FPS200固体指纹识别传感器。
图3.5 FPS200与AT89S51连接图
FPS200传感器支持三种接口方式:8位的系统总线接口、集成的全速的USB接口和集成的串行外设接口 ( SPI)其丰富的接口方式方便了指纹传感器的调试和使用其自带的USB接口可以将其数据自接传送到PC机上,这样就可以利用PC平台上的编译和调试下具来调试各种指纹识别的算法,方便了用户的初期测试,提高了效率和准确性。
FPS200与AT89S51的接口简略如连接图3.5。
如图3.5所示,利用传感器体统的MCU系统总线接口可以很方便地实现与MCU的连接。控制信号和都是片选信号,低有效,高有效,本系统选用的是;/RD和/WR分别为读写控制信号。
MODE0和MODE1两根信号线决定了FPS200工作在何种模式下:
MODE[1:0]=00b 系统总线接口工作模式,用于与MCU相连,正常工作时使用;
MODE[1:0]=01b SPI接口工作模式;
MODE[1:0]=10b USB接口工作模式,用于与PC相连调试时使用;
图3.6 读FPS200寄存器时序图
地址线,FPS200共有两个接口寄存器,索引寄存器和数据寄存器数,决定了是写索引寄存器还是读写数据寄存器。拉低时为写索引寄存器,数据总线~的内容写到索引寄存器;拉高时可读写数据寄存器,数据总线~上的内容读写到数据寄存器。
本系统对FPS200的控制:传感器是由内部寄存器控制的,而对传感器的内部控制器的读写是通过写索引寄存器以选择合适的内部寄存器后才可以读写具体的寄存器值。
先将管脚的电平拉低,发出写信号,将要读写的内部寄存器地址送到数据总线上,写入控制寄存器并由FPS200送到它的索引寄存器再将管脚拉高,发出读信号,将数据寄存器上的值读入MCU。写操作的过程类似,只是在写入索引寄存器后,发出写信号即可。
FPS200的数据读取:即指纹图像的读取需要注意的是控制寄存器A写这一寄存器就初始化了一幅指纹图像的采集然后循环读这一寄存器则可以读出指纹图像的结果。
3.7单片机和PC机的通讯功能
在指纹识别系统的设计中,初期利用PC平台上的编译和调试工具来调试各种指纹的算法,故需要设计单片机和PC机以及传感器之间的通信硬件电路。
大多数的计算机设备都具有RS
1.RS
RS
RS
2.RS
使用9针或2}针的连接器将RS
表3.2 串行口引脚定义表
DB-25 |
DB-9 |
信号名称 |
方向 |
含 义 |
2 |
3 |
TXD |
输出 |
数据发送端 |
3 |
2 |
RXD |
输入 |
数据接收端 |
4 |
7 |
RTS |
输出 |
请求发送(计算机要求数据) |
5 |
8 |
CTS |
输入 |
清除发送(MODEM准备接收数据) |
6 |
6 |
DSR |
输入 |
数据设备准备就绪 |
7 |
5 |
SG |
|
信号地 |
8 |
1 |
DCD |
输入 |
数据载波检测 |
20 |
4 |
DTR |
输出 |
数据终端准备就绪(计算机) |
22 |
9 |
RI |
输入 |
响铃指示 |
单片机与传感器或单片机与计算机之间直接使用RS
在设计单片机和PC机的硬件电路时,使用MAX232芯片实现TTL电平和PC机RS-232电平的转换,使用该芯片使电路外围电路简单,工作可靠[9]。
MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电时提供EIA/T工A-232-E电平。每个接收器将EIA/TIA-232-E电平输入转换为5V TTL/CMOS电平。这些接收器具有1. 3V的典型门限值及0. 5V的典型迟滞,而且可以接收士30V的输入。每个驱动器将TTL/CMOS输入电平转换为EIA/TIA-232-E电平。工作温度范围为
MAX232芯片的性能特点如下:
1.单5V电源工作;
2.两个驱动器及两个接收器;
3.士30v输入电平;
4.低电源电流:典型值是8mA;
5.符合甚至优于ANSI标准EIA/TIA-232-E及工TU推荐标准V. 28。
MAX232引脚如图3.7所示,1~6脚为电容端,7~14脚包含4路RS232/TTL电平转换器,其中两路为,另两路为。
图3.7MAX232引脚图
论文中所设计的指纹识别系统串口通讯的硬件电路图如图3.8所示。图中RXD与TXD可接入PC机的串行通信口。
图3.8MAX232通信硬件连接图
4.指纹识别系统软件设计
4.1算法的软件实现
指纹识别的核心算法开始时一般都是在PC机上运行的C程序,需要移植到单片机系统中。由于用高级语言编程效率高,可读性好,修改方便,而汇编语言的特点则是编程困难,但是运行速度快,可以直接和硬件通讯;而且,大多数公司均为单片机芯片提供了集成开发环境,该集成环境同时提供了c编译环境和汇编语言编译环境。所以在移植的过程中,一般采用混合编程思想。即某些复杂的模块可用基于单片机的汇编编程,例如:方向图计算和细化处理,而一些比较简单且不影响运行时间的模块可以用c语言编程然后转换成汇编代码,例如计算特征值。
要在PC机上运行程序并移植到单片机上,并调试指纹算法程序,监控单片机工作状态。我们就要建立调试通道,将传感器和单片机通过串口与PC机相连,传感器可经机调试,RGB格式的图像也可以先经过调试通道由PC机取得并分析传感器状态;单片机通过串口与PC机连接,并可通过调试软件调试指纹算法程序和监控单片机工作状态。
在此可以看出,数据通道在硬件上证明系统能够实现指纹识别的功能要求,而调试通道的设计着眼于程序和系统的调试工作,为进一步的软件设计与优化提供了方便的接口。
4.2指纹识别系统软件的编制
指纹识别系统核心技术流程如图4.1所示。
指纹识别系统主要集中在对指纹仪的操作以及使用人员信息登记、数据库管理、记录查询等功能的编程。开发工具采用Visual C++6.0。
在利用VC开发程序之前应先安装FDU2000指纹仪的SDK。对SDK的有效应用分为两种:隐式链接和显示链接两种方式。在本系统中采用的是隐式链接,将SDK安装目录下的相应的动态库文件(P1mDll. dll文件)拷入系统目录或其它系统可以找到的目录中,同时将Lib目录下的导入库文件(P1mD11. lib文件)加入工程设置的“Link一General一Object/library module”栏中以及将Inc目录下的头文件P1mD11. h加入工程的头文件中,并在*. cpp文件中包含相应头文件即可。接下来就可以开始编写应用程序的代码了。
4.3指纹传感器初始化设置
指纹传感器在调用之前必须对指纹传感器进行初始化并使其处于接受指纹图像输入的状态它的初始化是通过在指纹识别系统主程序的主对话框的初始化函数中调用指纹传感器的初始化函数FingerInit()来初始化COM接口的,这是开始使用动态连接库的第一个函数,未初始化之前,其它函数的调用都无效。若初始化成功该函数返回0,失败则返回1。如果之前调用FingerInit()并成功,第二次调用将不做任何动作,直接返回0。 P1mD11. dll只允许被系统中的一个进程调用。当第二个进程调用初始化函数时,函数返回FALSE。
同样,在框架类的析构函数中调用反初始化函数FingerDestory()来释放所有资源,它与FingerInit()成对使用。这是使用动态连接库的最后一个函数,这个函数应该在程序退出时调用。采集卡的初始化的代码如下:
BOOL CTestSecuGenDLLDLg::OnInitDialog()
{
CDialog::OnInitDialog();
//Add”About…”menu item to system menu.
FingerInit(0,5000,5);//指纹硬件初始化,参数1选择硬件类型
//IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & OxFFFO) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < OxFFFO);
……
}
Fingerinit()函数的第一个参数是指纹仪类型,0为串口指纹仪;1为并口连接的指纹仪。参数2位指纹采集最长等待时间:一秒二1000,一般设置为5000。参数3为安全等级:1-9级,一般设置为5 。1为最低安全等级,9为最高安全等级,5为正常级别。
4.4 指纹识别系统串口通信
本系统的串口通信是指:当单片机与PC机调试成功之后,将所编程序和指纹用户登记数据库传送到指纹识别系统中的外部寄存器中。
本系统是利用Visual C++6. 0中的一个串行通讯标准控件Microsoft Communications Control(简称MSComm)来实现PC机与单片机的串口通讯的。MSComm控件属于ActiveX控件,使用时只需按照系统的实际环境设置控件参数就可以。
实现指纹识别系统中串口通讯的主要步骤如下:
1.首先在工程中插入MSComm控件,利用ClassWizard在主对话框类中定义CMSComm类控制对象工DC_MSCOMMI,并为它添加控制变量m_ctrlComm。
2.串口的初始化。由于在识别系统中串口只用来发送与PC机通信信号,所以无需设置与接收数据有关的参数,只需对以下参数进行设置。这是通过控制变量m_ctrlComm来完成的。
m_ctrlComm. SetCommPort (1) ; //选择串口COM1
m_ctrlComm.SetPortOpen(TRUE); //打开串口
m_ctrlComm.SetInputMode(1); //设置输入方式为二进制方式
m_ctrlComm.SetSetting (“9600, n, 8,
3.串口数据的发送。当调试,编程完成时,调用串口发送数据函数。
m_ ctrlComm.SetOutput(ColeVariant("m strTXData”)); //发送数据。
4.4.1 89S51串行口工作方式
表4.1 串行口工作方式
SM0 SM1 |
工作方式 |
说 明 |
波特率 |
0 0 |
方式0 |
同步移位寄存器 |
fosc/12 |
0 1 |
方式1 |
10位异步收发器 |
由定时器控制 |
1 0 |
方式2 |
11位异步收发器 |
fosc/32或fosc/64 |
1 1 |
方式3 |
11位异步收发器 |
由定时器控制 |
图4.2串行口控制寄存器SCON
89S51串行口共有四总工作方式,表4.1所示。89S51串行口是可编程接口,对它初始化编程只需用两个控制字分别写入特殊功能寄存器SCON(98H) 和电源控制寄存器PCON (87H)中即可。
89S51串行通讯的方式选择、接受和发送控制以及串行口的状态标志等均由特殊功能寄存器SCON控制和指示,其控制字格式如图4.1所示。电源控制寄存器PCON中只有SMOD位于串行口工作有关,其控制字格式如图4.2所示。
在所设计的识别系统中,采用方式1发送和接受数据,这种方式是10位通用异步接口。TXD与RXD分别用于发送与接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。在接收时,停止位进入SCON的RB8,此方式的传送波特率可调。
当单片机以方式1接受时,数据从引脚RXD (P3. 0 )端输入。接受是在SCON寄存器中REN位置1的前提下,并检测到起始位(RXD上检测到1到0的跳变,即起始位)而开始的。为了接收准确无误,在正式接收数据之前,还必须判断这个1到0跳变是否是干扰引起的。为此,在这位中间连续对RXD采样三次,取其中两次相同的值进行判断。这样能较好的消除干扰的影响。当确认是真正的起始位后,就开始接受一帧数据。当一帧数据接收完毕后,必须同时满足以下两个条件,这次接受才真正有效。
1.RI=0,即上一帧数据接收完成时,RI=1发出的中断请求己被响应,SBUF中数据己被取走。由软件是RI=0,以便提供“接收SBUF己空”的信息。
2.SM2=0或收到的停止位为1,则将接收到的数据装入串行口的SBUF和RB8,并置位RI;如果不满足,接收到的数据不能装入SBUF,这意味着该帧信息将会丢失。
通信协议:
(1)波特率:1200b/s;
(2)信息格式:8位数据位,1位停止位,无奇偶检验;
(3)传送方式:PC机采用查询方式收发数据;89S51采用中断方式接收,查询方式发送;
(4)校验方式:累加和校验;
(5)握手信号:采用软件握手。发送方在发送之前先发一联络信号。
通过串口向单片机发送指纹识别子程序,使用函数sendf()进行发送。
sendf()函数程序流程图如图4.4
PC机发送文件子函数sendf()程序清单如下:
Void sendf(char *fname)
{FILE *fp;
char ch;
int handle, count,sum=0
if (( fp=fopen(fname,“r”))==NULL)
{printf(“不能打开输入文件!\n”);
exit(1);
}
handle=fileno(fp); /*取得文件句柄*/
count=filelength(handle); /*取得文件总字数*/
printf(“准备发送文件…”);
do
{ch=‘?’; /*发送联络信号*/
sport(ch);
}while(rport()!=‘.’); /*直到接到应答信号为止*/
sport(count); /*发送总字数*/
rep:
for(;count;count--)
{ch=getc (fp); /*从文件中取一个字符*/
Sum=sum+ch; /*累加校验和*/
if (ferror(fp))
{printf(“读文件有错误”);
break;
}
sport(ch); /*从串口发一个字符*/
}
sport(sum); /*发送累加校验和*/
if(rport()==’F’)
{count=filelength(handle); /*发送错误则重发*/
sum=0;
fseek(fp,-count,1); /*文件指针回退COUNT字节*/
goto rep;
}
else
{fclose(fp);
Printf(“发送文件结束\n”);
}
}
有上述发送文件子函数,主函数的工作只是在完成串口初始化后根据键入命令来决定是发送文件还是接收文件。
主函数流程图如图4.5所示
图4.5 PC机主函数流程图
PC机主函数如下:
main (int argc,char *argv[])
{while (argc!=3)
{printf(“命令行命令不正确,请重新键入命令!\n”)
exit(1);
}
bioscom(0,0x83,0); /*串口初始化*/
if (tolower(*argv[1])==’s’)
sendf (argv[2]);
else if (tolower(*argv[1])==’r’)
receive (argv[2]);
从PC机调试完,传送指纹识别程序到单片机中,通过调用指纹识别程序来对指纹传感器输入的指纹图像数据进行数字滤波处理。
单片机主程序流程设计:
N
Y
图4.5 单片机的主程序流程图
单片机主程序如下:
ORG 0000H
AJMP
ORG 0023H
AJMP RECE
ORG 0040H
MAIN:MOV SP,#60H
MOV SCON,#50H ;串口初始化
MOV TMOD,#20H
MOV TH1,#
MOV TL1,#
MOV PCON,#00H ;设置波特率
SETB TR1 ;启动定时器1
SETB EA ;开放中断
SETB ES ;开放串行中断
L3: CLR 00H
CLR 01H
CLR 02H
CLR 03H
CLR 04H
MOV R6,#00H
MOV DPTR,#1000H
L2: JB 03H,L1
SJMP L2
L1: ACALL SEND
AJMP L3
在中断服务子程序中,为区别所接收的信号是联络信号还是字节数、是数据还是校验和,需要设立不同的标志位,为此在可位寻址的RAM 68128中设定
位地址
00H 接收联络信号标志位
01H 接收字节数标志位
02H 接收数据标志位
03H 接收文件结束标志位
在初始化时,这些位均为0。在中断服务子程序中,将接收到的字节数存入R7中,接收的数据存入片外RAM从1000H开始的单元中。单片机接收中断服务子程序见附录。
[1] 李建华,马小妹,郭成安,基于方向图的动态闽值指纹图像二值化方法.大连理工大学学报. 2002, 42 (5):626-628.
[2] 冯星奎,李林艳,颜祖泉. 一种新的指纹图像细化算法.中国图像图形学报,1999, 4(10)835-838.
[3]吕凤军.数字图象处理编程入门一一做一个自己的Photoshop.北京:清华大学出版社,1999.
[4] 刘文星,王雄沂,母国光.纹线跟踪及其在细化指纹后处理中的应用.光电子·傲光,2002,13 (2):184-187.
[5] 刘家锋,唐降龙,赵泉.一个基于特征点匹配的联机指纹鉴别系统.哈尔滨工业大学学报,2002. 34 (1):132-136
[6] 简兵,庄镇泉等。基于脊线跟踪的指纹图细节提取算法。电路与系统学报,2001
[7] 刘旭,田捷.自动指纹识别算法在嵌入式系统的实现[ J].计算机工程与应用,2002.
[8] 周毅,等著.基于SPI协议的实现,计算机仿真.2003.
[9] 窦振中.单片机外围器件实用手册(存储器分册).北京:北京航空航天大学出版社,20O0
[10] 李华.MCS-51系列单片机实用接口技术.北京:北京航空航天大学出版社,1998
[11] 张培仁,孙占辉,张村峰,等.基于c语言编程MCS一51单片机原理与应用[M].北京:清华大学出版社,2003.