数学建模期末作业.docx
《数学建模期末作业.docx》由会员分享,可在线阅读,更多相关《数学建模期末作业.docx(32页珍藏版)》请在冰豆网上搜索。
数学建模期末作业
指纹识别技术研究
摘要
目前大部分研究认为指纹具有唯一性,可以作为个人身份验证的凭证,因此指纹识别技术一直以来就会研究热点,而随着移动设备对指纹识别的使用,指纹识别技术更需要进一步研究与改进。
本文主要研究了指纹识别从采集到匹配所采用的算法。
指纹识别的主要步骤是图像预处理、特征点提取、匹配。
在指纹预处理过程上,本文对预处理方法进行分析筛选,选择了最优的方案处理;在提取上,采用3*3矩阵遍历提取的算法,并且对于提取的特征点进行筛选,保证了特征点的准确度与代表性;在匹配部分,采取了使用距离与角度的匹配,保证了在指纹图像在旋转一定角度后的匹配鲁棒性。
关键词 指纹识别;预处理;特征提取;匹配
一、问题的重述
指纹自古便被作为人身份的鉴别工具,而且随着指纹学的研究基本成熟,指纹识别越来越多的使用,但是靠人工对比指纹卡鉴别速度慢、效率低。
随着计算机技术的发展,人们开始研究使用计算机识别指纹的技术,以提高效率。
1.对于采集到的指纹图像进行预处理,将图形中的噪点,冗余信息剔除,并将图像转化成为二值图像以便于处理,最后要将图形中指纹纹线细化为单像素宽的轨迹,以便于提取特征点。
2.提取特征点,主要是提取出指纹中具有代表性的端点和分叉点作为特征点提取出来。
3.匹配,就是将已经提取到的两幅图的特征点集进行匹配。
二、模型假设
1.不考虑提取过程中未提取到指纹中心点的的指纹图像。
2.假设指纹图像是没有巨大伤痕的。
3.假设指纹图像是基本清晰可是别的。
三、变量说明
四、指纹图像预处理
直接采集到的原始图像并不能满足提取特征点的要求,会存在很多的噪声。
这些噪声点由采集仪器,环境因素,人为操作等所产生的各类噪声所组成。
如采样和量化产生的高频散粒噪声、光照不均引起的低频噪声以及采集头上的污渍所引入的噪声;手指被弄脏,手指有刀伤、疤、痕、干燥、湿润或撕破等。
【1】
这些噪声严重影响了指纹图像的特性,致使指纹图像包含的部分细节特征不清晰甚至出现丢失,同时引入许多虚假的特征信息,如果直接对原始指纹图像进行特征提取,势必会影响指纹识别结果的准确性。
所以,在提取特征之前需要对采集到的指纹图像进行预处理,以去除噪声信号,使其变成一幅纹线结构清晰特征信息明显的二值点线图。
主要流程如下图4-1所示:
图4-1图像预处理流程
归一化
首先需要将指纹图像与背景图分离开,所以首先进行归一化处理。
归一化利用公式如下4-1所示:
【2】
(4-1)
如果
,则把灰度值
归一化为255背景处理,其中
和
为期望的均值和方差,根据实际情况而定,
和
为指纹图像的均值和方差。
分割
分割图像基于块特征的指纹图像分割,本文处理将采用均值方差法【3】。
该算法基于背景区灰度方差小,而指纹区方差大的思想,将指纹图像分成块,计算每一块的方差,如果该块的方差小于阈值为背景,否则为前景。
具体步骤分以下三步:
(1)将图像分块,将其分为N×N的方块。
(2)计算出每一块的均值和方差。
(3)如果方差很小,接近于0就认为是背景,对于方差不为零的区域在进行阈值分割算法。
二值化
二值化是对分割后的图像的进一步处理,使图像灰度值只有两个值(黑、白)。
以便于进一步处理。
二值化即选择某一阈值,对于大于阈值的灰度置为1,小于阈值的灰度值都置为0,如下4-2公式:
【4】
公式4-2二值化公式
但是由于原始指纹图像不同区域深浅不一,如对整幅图像用同一阈值进行二值分割,会造成大量有用信息的丢失。
所以我们可以选用局部阈对图像进行二值化。
局部阈值法即选取N×N的块,求该区域的阈值并对该区域二值化,可以有效地保证信息的可靠性。
二值化结果如下图4-3所示:
图4-2二值化
细化
二值化以后还需要将纹线宽度细化为单像素才便于提取特征点,本文细化采用MATLAB里的bwmorph函数对图像进行细化。
代码为:
w=bwmorph(u,'thin',Inf);
细化图如下图4-4所示:
图4-3细化图
五、特征点的提取
特征点提取概述
特征点提取是指纹识别的关键,特征点指能代表指纹特异性的指纹纹路信息。
一般说来,这种特征应有以下性质:
【5】
(1)单一性:
要求这种特征能够充分体现指纹的唯一性。
(2)可测试性:
适用于指纹匹配算法,便于在匹配算法中应用。
(3)紧凑性:
要求提取的特征不应包含指纹唯一性以外的冗余信息,并且信息量要尽量小,便于存储、管理和计算。
(4)鲁棒性:
要求这种特征对噪声的存在与指纹形变不敏感。
为了比较两个指纹是否相同,需要从指纹图像中提取出能表示指纹唯一性的特征。
Galton提出的指纹细节点是人工指纹匹配中最常用的特征。
指纹由脊线和谷线交替构成,在大多数地方纹线连续且相互平行,而某些局部不连续的地方构成了细节点。
Galton定义了4种细节点类型:
分叉点,端点,环、岛,并指出细节点具有唯一性,可以用于指纹匹配。
但是基本上的特征点都是由两类最基本的特征点构成的,即端点和分叉点。
本文提取的特征点即最基本的特征点,端点和分叉点【6】。
提取到特征点后并不可直接使用,因为由于指纹纹路的复杂性,往往产生很多特征点,其中很多都是伪特征点,需要我们剔除,所以提取到端点和分叉点以后需要去除为特征点。
端点提取概述
特征点提取去采用3×3的块进行遍历提取,端点的判断条件为:
周围的8邻域两两相邻当且仅当存在2个不同值。
如下图5-1所示:
(1)
(2)
(3)(4)
图5-1端点提取的四种情况
分叉点提取概述
特征点提取去采用3×3的块进行遍历提取,分叉点的判断条件为:
周围的8邻域两两相邻当且仅当存在6个不同值。
如下图5-2所示:
(1)
(2)
(3)(4)
图5-2分叉点提取的四种情况
伪特征点剔除
因为采集、预处理过程中的空因素和提取算法的原因,提取到的特征点中会存在很多为特征点。
为了不影响后续的识别,必须进行剔除。
文本中剔除的伪特征点主要有三种:
指纹范围外的点、指纹边沿的端点、断点,并根据这三种伪特征点的特征进行剔除。
在伪特征点剔除算法中,主要使用到了特征点距离的概念,特征点
和
间距离用欧式距离计算,见式(5-1):
(5-1)
下面是三类伪特征点的筛选方法:
第一类:
指纹范围外的点,本文中范围用了17。
此时把它和周围8点记为0,并在上述基础上减去不是特征点的个数。
第二类:
指纹边沿的端点,【7】观察细化图可以发现,真正的端点的在它周围半径
,
为平均纹线宽度,本文中
。
在
范围内没有其它特征点存在,则是真的端点。
而周围有其他特征点的,则可以认为是指纹的边沿端点,即第二类特征点。
如下图所示,展示了局部的端点标记,在图中绿色标记的是真正的端点,而红色标记的则是指纹边沿的端点,即第二类伪特征点。
图5-3第二类伪特征点对比
第三类为断点:
断点,【8】即被认定为端点且在12的上半范围或下半范围,具有被确定为端点的特征点的点,则认为是第三类为特征点,即端点。
如下图所示,展示了局部的端点标记,其中绿色的为较长纹线的端点,判断为真特征点;而很短的纹线(一般是有假信号)的端点则根据12的范围,被判断为断点,即第三类伪特征点。
图5-4第三类伪特征点对比
六、匹配
指纹匹配算法综述
对于指纹识别的算法人们已经有了很多研究,也提出了很多匹配的算法,目前来看主要有两类:
一类是基于图形的匹配方式,包括点模式匹配和基于图论的方法;另一类是采用人工神经网络的方法。
图形匹配是针对纹线几何形状及其特征点拓扑结构的匹配方式,它的原理是基于相似变换的方法把两个特征点集中的相对应点匹配起来,这些相似变换可以是平移变换、旋转变换、伸缩变换等线性变换,可以在一定程度内允许少量伪特征点的存在、真正特征点的丢失以及轻微的特征点定位偏差,且对图像的平移和旋转也不敏感。
但这种方法有两点不足:
一是匹配速度比较慢;二是对指纹图像的质量要求比较高,低质量的图像匹配效果不佳,下面对这些算法进行一些简要的介绍【8】。
Ranade和R.Seinfeld提出了点模式匹配的松弛算法,其思想是寻找一对匹配点,使得反映匹配程度的相似变换最大,则将该点对作为基准点对,然后根据相似变换的计算结果调整待识别图像的位置,统计最终的匹配点对数,给出匹配结果。
Stookinan等提出的基于Hough变换的方法,把点模式匹配转化成对转换参数的Hough空间中的峰值检测。
这种方法的缺点在于当特征点数目较少(少于30个)时,很难在Hough空间里积累起足够大的证据来保证一个可靠的匹配,另外,该方法有计算量较大的缺点。
Sparrows与A.K.Hrechak等都提出了基于结构信息的特征匹配方法,而D.K.ISenor与S.G.zaky使用图来表示指纹特征,并用图匹配的方法来匹配指纹图像。
这类方法利用了指纹图像的拓扑结构,允许一般的图像平移旋转、特征点丢失以及伪特征点的存在,但是这类方法的准确性在很大程度上依赖于所提取的指纹特征信息及分类信息的准确性。
采用人工神经网络的指纹匹配方法也有很多。
Vinod将非对称神经网络应用于指纹匹配中,提出了一种基于非对称神经网络的点模式匹配算法,而田捷等人将遗传算法应用于指纹匹配中,提出了基于遗传算法的指纹图匹配方法,利用指纹图像的结构信息进行初匹配,缩小搜索空间,然后采用遗传算法和补偿算法匹配指纹图像,有较强的抗噪声与非线性形变的能力。
但由于神经网络固有的反复处理特性,速度难以得到提高,计算量偏大,因此不适合用于对实时性要求较高的在线指纹识别系统【9】。
指纹中心点的提取
因为中心点一般位置固定,以指纹中心点定位具有鲁棒性强,准确性高的有点,所以本文采用中心点为参考等进行匹配。
以中心点为参考进行匹配,首先需要寻找中心点。
本文采用了基于Sobel算子的指纹中心点定位,这里选取的中心是指纹中心的一个小区域,先求出指纹图像的点方向,相邻8个灰度值之和的平均值,再求这8个灰度值与平均值之差的和,最小和所在的方向即此点所在指纹脊线的方向,如此得到点方向图。
把点方向图分为若干块16×16大小的小块,对每块计算直方图,其峰值方向即为块方向,即每块中点的主导方向。
然后在这个粗的块方向图上按照以下原则去搜索中心区域,逐行检查块方向数组。
然后再根据求出各个方向的角度以及相邻8个灰度值之和的平均值,再求这8个灰度值与平均值之差的和,最小和所在的方向即此点所在指纹脊线的方向,如此得到点方向图。
该方法求取的中心点具有很强的鲁棒性【10】。
建立匹配集合
提取特征点的过程将两类特征点存储进一个三列的矩阵中,其中分别存储特征点的类型、横坐标、纵坐标。
本文采用将各特征点以中心点为参考,把获得的x,y坐标转化成为以中心点为远点的极坐标形式,即距离中心点的距离d与中心点所成角度
。
求距离d的公式为公式5-1,求角度
的公式(6-1)如下:
(6-1)
一组转换前后的数据,如下图6-1:
x
y
style
d
style
39
97
1
15.2315
-1.1659
1
49
78
1
36.6742
-1.1193
1
61
108
1
28.1603
-0.1067
1
103
178
1
96.8969
0.7635
1
106
112
1
73.0068
0.0137
1
113
110
1
80.0062
-0.0125
1
121
93
1
89.8220
-0.2018
1
139
85
1
109.1421
-0.2405
1
140
84
1
110.3540
-0.2472
1
148
82
1
118.6002
-0.2470
1
153
182
1
139.4310
0.5343
1
157
76
1
128.8449
-0.2751
1
158
112
2
125.0040
0.0080
2
161
189
1
149.8933
0.5473
1
173
38
1
157.8892
-0.4806
1
174
99
2
141.5097
-0.0849
2
178
191
1
165.6050
0.5042
1
192
91
1
160.2529
-0.1251
1
201
89
1
169.4344
-0.1302
1
205
196
2
191.8567
0.4590
2
207
157
1
179.9778
0.2585
1
208
158
1
181.2015
0.2624
1
213
170
1
189.4228
0.3167
1
220
181
1
199.6722
0.3582
1
224
95
1
191.6690
-0.0836
1
239
113
1
206.0097
0.0097
1
240
133
1
208.1658
0.1059
1
241
134
1
209.2678
0.1101
1
247
87
1
215.3416
-0.1117
1
247
104
2
214.1145
-0.0327
2
248
86
1
216.4486
-0.1158
1
248
88
1
216.2267
-0.1066
1
251
114
2
218.0206
0.0138
2
251
179
1
228.3594
0.3024
1
256
114
1
223.0202
0.0135
1.
260
131
1
227.8794
0.0879
1
260
164
1
233.1051
0.2294
1
260
173
2
235.3147
0.2666
2
264
29
1
245.1224
-0.3411
1
264
109
1
231.0087
-0.0087
1
268
113
1
235.0085
0.0085
1
268
123
1
235.3062
0.0510
1
268
148
1
237.8949
0.1562
1
269
158
1
240.6346
0.1966
1
270
140
1
238.7677
0.1218
1
271
139
1
239.6414
0.1171
1
277
73
2
246.9413
-0.1545
2
281
89
1
248.9739
-0.0885
1
282
88
1
250.0600
-0.0921
1
283
111
2
250.0000
0.1233
2
1)原始数据2)匹配集
图6-2建立匹配集
匹配方法
指纹匹配其实就是匹配两个三维向量集,但是由于匹配集大小不同,所以指纹匹配一直是模式识别中的一个难题。
一个好的匹配算法需要做到匹配准确,鲁棒性高。
本文的算法采用步骤为:
(1)从一个匹配集中依次取出每个点
(2)将取出的每个点与另一个点集中的所有点依次对比
(3)对比方法为:
特征点类型相同,且d的差和
的差小于标准要求,则匹配点加一
(4)遍历所有点后,若匹配点个数大于等于两组集合中点个数小的那组的点个数的60%,则认为匹配成功,否则匹配失败。
实验
在对原来指纹用去签字笔模拟手指受到外界影响后的对比试验,如下图6-3所示:
图6-3实验结果图
实验结果为:
>>match('0.bmp','1.bmp')
时间已过9.620100秒。
ans=
匹配率:
73.3696%匹配成功
七、模型的评价与推广
(1)本模型完成了指纹图像的预处理,特征点提取和匹配。
达到了使用计算机帮助人们完成指纹识别的工作。
(2)本模型的创造性在于使用块遍历方式搜寻特征点,并采用极坐标的三维向量方式匹配指纹,使得提取快捷,匹配准确性高。
(3)本模型的最大缺点时匹配时间长,无法达到一些实际使用的要求。
还需要再预处理和伪特征点剔除的过程中减少对整幅图像的操作,以减少时间。
(4)细化后图像出现突出状毛刺,会被误识为特征点且不易去伪。
改进细化图像的
方法。
八、参考文献
[1]杜彦蕊,李丹.指纹识别技术探究.中国教育技术装备,2010,3:
61
[2]张雄,贺贵明,一种指纹宏观曲率特征提取算法.武汉大学软件工程国家重点实验室.2002.11
[3]李惠芳.基于方向图的指纹图像自适应二值化算法研究.北京师范大学学报(自然科学版),2009,45(3):
250~253
[4]田捷,陈新建,张阳阳.指纹识别技术的新进展.自然科学进展,2006.16(4):
400-40
[5]崔艳秋,基于MATLAB的指纹识别系统设计,2009
[6]陈倩.基于细节特征的指纹识别算法研究.武汉理工大学硕士论文,2008
[7]王爱丽,指纹识别算法研究,2008
[8]李晨丹,徐进,指纹图像预处理和特征提取算法的MATLAN实现.计算机工程与科学.
[9]孙玉明,王紫婷.基于Matlab的指纹识别系统的研究与实现.电脑知识与技术,2009,34(5):
9803~9804
[10]陈戈珩,王飞,基于Matlab的Sobel算子的指纹中心点定位.现代电子技术.2009.8
九、源代码
MATLAB程序:
function[R]=match(a,b)
%UNTITLED2匹配函数
%a,b为指纹图像名称
tic;
t1=imread(a);
t2=imread(b);
subplot(2,2,1);
imshow(t1);title('原图一');
subplot(2,2,2);
imshow(t2);title('原图二');
[t3,x]=getTezheng(a);
[hx,wx]=size(x);
x1=zeros(0,3);
x2=zeros(0,3);
fori=1:
hx
ifx(i,3)==1
x1(i,1)=x(i,1);
x1(i,2)=x(i,2);
x1(i,3)=x(i,3);
else
x2(i,1)=x(i,1);
x2(i,2)=x(i,2);
x2(i,3)=x(i,3);
end
end
[t4,y]=getTezheng(b);
[hy,wy]=size(y);
y1=zeros(0,3);
y2=zeros(0,3);
fori=1:
hy
ify(i,3)==1
y1(i,1)=y(i,1);
y1(i,2)=y(i,2);
y1(i,3)=y(i,3);
else
y2(i,1)=y(i,1);
y2(i,2)=y(i,2);
y2(i,3)=y(i,3);
end
end
subplot(2,2,3);
imshow(t3);title('特征图一');
holdon
plot(x1(:
2),x1(:
1),'ro');
plot(x2(:
2),x2(:
1),'go');
subplot(2,2,4);
imshow(t4);title('特征图二');
holdon
plot(y1(:
2),y1(:
1),'ro');
plot(y2(:
2),y2(:
1),'go');
m=distance(x);
n=distance(y);
[m1,n1,o1]=size(m);
[m2,n2,o2]=size(n);
count=0;
fori=1:
m1
forj=1:
m2
if(m(i,3)==n(j,3)&abs(m(i,1)-n(j,1))<2&abs(m(i,2)-n(j,2))count=count+1;
end
end
end
if(count/max(m1,m2)>0.6)
R=['匹配率:
',num2str(count/max(m1,m2)*100),'%匹配成功'];
else
R=['匹配率:
',num2str(count/max(m1,m2)*100),'%匹配失败'];
end
toc;
end
function[R1,R2]=getTezheng(x)
%UNTITLED获取特征点集
%此处显示详细说明
I=imread(x);
[m,n]=size(I);
I=double(I);
%归一化
M=0;var=0;
forx=1:
m
fory=1:
n
M=M+I(x,y);
end
end
M1=M/(m*n);
forx=1:
m
fory=1:
n
var=var+(I(x,y)-M1)*(I(x,y)-M1);
end
end
var1=var/(m*n);
forx=1:
m
fory=1:
n
ifI(x,y)>=M1
I(x,y)=150+sqrt(100*(I(x,y)-M1)*(I(x,y)-M1)/var1);
else
I(x,y)=150-sqrt(100*(M1-I(x,y))*(M1-I(x,y))/var1);
end
end
end
%分割
M=10;
H=fix(m/M);L=fix(n/M);
aveg1=zeros(H,L);
var1=zeros(H,L);
forx=1:
H;
fory=1:
L;
aveg=0;var=0;
fori=1:
M;
forj=1:
M;
aveg=I(i+(x-1)*M,j+(y-1)*M)+aveg;
end
end
aveg1(x,y)=aveg/(M*M);
fori=1:
M;
forj=1:
M;
var=(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y))*(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y))+var;
end
end
var1(x,y)=var/(M*M);
end
end
Gmean=0;Vmean=0;
forx=1:
H
fory=1:
L
Gmean=Gmean+aveg1(x,y);
Vmean=Vmean+var1(x,y);