ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:400.01KB ,
资源ID:10427195      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10427195.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(指纹识别的最终版.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

指纹识别的最终版.docx

1、指纹识别的最终版指纹识别技术研究陈博 毛庆凯 曹泽(南京大学电子学院,南京 210046)(人数问题说明:本组包括三人:陈博(071180004),毛庆凯(071180066),曹泽(071180003)。本组三人之前分别属于两组,后因时间紧迫,为了最终做出指纹识别这一共同目标,两组决定合作,遂造成了本组三人的局面,望老师谅解。不过本组分工明确:前期三人都收集了若干资料,毛庆凯同学负责指纹图像预处理,最终得到了指纹的细化图像;陈博同学负责特征点提取和特征点匹配;曹泽同学负责将两部分结合,并完成了论文的创作。)摘要:随着生物识别技术的不断发展,人们发现每个人的指纹具有唯一性和不变性。因此指纹识别

2、技术逐步发展为一种新的身份识别方式,并且凭借其良好的安全可靠性,大有取代传统身份识别方式的趋势。本文简要介绍了指纹识别的基本步骤,分别是指纹图像预处理、指纹特征提取、指纹匹配。在图像预处理中,依次介绍了规格化处理、图像增强、二值化处理和细化处理的方法。预处理后将得到一幅宽度为一个像素的细化二值图像,然后通过特定的端点和交叉点的特征进行指纹匹配。实验表明,该方法效果良好。论文中采用Matlab编程实现全部算法。关键词:指纹识别,图像处理,特征提取,特征匹配1引言传统的身份识别技术包括基于密码的身份识别技术和基于令牌的身份识别技术。但是这两种方式都存在着一定的安全风险:令牌容易丢失,密码容易忘记,

3、且它们都容易被窃取或冒充。近年来,依赖人体特征的新型身份识别技术正在兴起,凭借其唯一且不变的特点,生物识别技术逐步成为人们研究的热点。而在生物识别技术中,指纹识别技术已经被广泛的研究和应用。它的基本原理框图如图一所示。 图1指纹识别的基本原理框图2指纹图像预处理2.1图像规格化受采集设备参数和环境的影响,采集到的指纹图像可能总体对比度较差。图像归一化的作用就是使所有指纹图像具有相同的灰度均值和方差,从而将每一幅图像的灰度调整到统一的范围,方便后续处理。归一化的算法是:(1)先计算图像的平均值和方差。这部分工作主要通过统计图像中各点像素值得到该图像的直方图,然后利用直方图来计算指纹图像的相关指标

4、。(2)指定期望经过处理后的图像均值和方差,计算归一化后的图像G。图像规格化的Matlab程序如下(其中方差取Var0=2000,M0=150):% 归一化M=0;var=0;%图像的平均值和方差开始进行初始化for x=1:m for y=1:n M=M+I(x,y); endendM1=M/(m*n);%计算图像的平均值for x=1:m for y=1:n var=var+(I(x,y)-M1).2;%计算图像的方差 endendvar1=var/(m*n);for x=1:m for y=1:n if I(x,y)=M1 I(x,y)=150+sqrt(2000*(I(x,y)-M1)

5、/var1);%处理后的图像均值 else I(x,y)=150-sqrt(2000*(M1-I(x,y)/var1);%处理后的图像方差 end endendfigure, imshow(uint8(I) ;%显示归一化后的图像带入指纹图像zhiwen1.bmp后得到的原始图像和归一化图像见图2和图3: 图2原始指纹图像 图3规格化后的指纹图像2.2图像分割指纹图像通常包括纹线区域和周边的无用区域。如果保留这些无用区域,会致使计算冗余度增加。为此要先将其从待处理区域中去除。通常用的分离方法有像素领域特征的方法和基于像素分布概率的方法等。本文采取对各像素邻域特征进行分析,然后分割图像算法。吧图

6、像分成T*T的非重叠块,计算每一块的灰度均值M和方差Var,通过下列条件区分前景与背景:(1)如果MM1且VarVar1,则认为背景(2)如果M=Var1,则认为前景,否则待定;(3)对所有分块划分完毕后,在对待定块进行判决。如果在8邻域中,背景景小于等于4则认为是前景,否则是背景在编程过程中通过几次调试后对图像进行3*3分块处理Matlab程序如下:% 分割M =3; %3*3H = m/M; L= n/M;aveg1=zeros(H,L);var1=zeros(H,L);% 计算每一块的平均值for x=1:H; for y=1:L; aveg=0;var=0; for i=1:M; fo

7、r j=1:M; aveg=I(i+(x-1)*M,j+(y-1)*M)+aveg; end end aveg1(x,y)=aveg/(M*M);% 计算每一块的方差值 for i=1:M; for j=1:M; var=(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y).2+var; end end var1(x,y)=var/(M*M); endendGmean=0;Vmean=0;for x=1:H for y=1:L Gmean=Gmean+aveg1(x,y); Vmean=Vmean+var1(x,y); endendGmean1=Gmean/(H*L);%所有块

8、的平均值Vmean1=Vmean/(H*L);%所有块的方差 gtemp=0;gtotle=0;vtotle=0;vtemp=0;for x=1:H for y=1:L if Gmean1aveg1(x,y) gtemp=gtemp+1; gtotle=gtotle+aveg1(x,y); end if Vmean1var1(x,y) vtemp=vtemp+1; vtotle=vtotle+var1(x,y); end endendG1=gtotle/gtemp;V1=vtotle/vtemp; gtemp1=0;gtotle1=0;vtotle1=0;vtemp1=0;for x=1:H

9、for y=1:L if G1aveg1(x,y) gtemp1=gtemp1-1; gtotle1=gtotle1+aveg1(x,y); end if 0var1(x,y)G2 & var1(x,y)M1且VarVar1,则认为背景 e(x,y)=1; end %如果M=Var1,则认为前景,否则待定 if aveg1(x,y) G1-100 & var1(x,y) V2 e(x,y)=1; end endend for x=2:H-1 for y=2:L-1 if e(x,y)=1 if e(x-1,y) + e(x-1,y+1) +e(x,y+1) + e(x+1,y+1) + e(x

10、+1,y) + e(x+1,y-1) + e(x,y-1) + e(x-1,y-1) (3*summ/8),则该像素点的脊线方向为summin,否则为summax.确定完方向后就根据该向场对图像进行二值化。Matlab程序如下:%二值化temp=(1/9)*1 1 1;1 1 1;1 1 1;%模板系数 均值滤波 Im=double(I); In=zeros(m,n);% 创建一个全0的二维数组,m行n列for a=2:m-1; for b=2:n-1; In(a,b)=Im(a-1,b-1)*temp(1,1)+Im(a-1,b)*temp(1,2)+Im(a-1,b+1)*temp(1,3

11、)+Im(a,b-1)*temp(2,1)+Im(a,b)*temp(2,2)+Im(a,b+1)*temp(2,3)+Im(a+1,b-1)*temp(3,1)+Im(a+1,b)*temp(3,2)+Im(a+1,b+1)*temp(3,3); endend I=In;Im=zeros(m,n);% 创建一个全0的二维数组,m行n列for x=5:m-5; for y=5:n-5; %分别计算8个方向上的经过处理后的灰度值 sum1=I(x,y-4)+I(x,y-2)+I(x,y+2)+I(x,y+4); sum2=I(x-2,y+4)+I(x-1,y+2)+I(x+1,y-2)+I(x+

12、2,y-4); sum3=I(x-2,y+2)+I(x-4,y+4)+I(x+2,y-2)+I(x+4,y-4); sum4=I(x-2,y+1)+I(x-4,y+2)+I(x+2,y-1)+I(x+4,y-2); sum5=I(x-2,y)+I(x-4,y)+I(x+2,y)+I(x+4,y); sum6=I(x-4,y-2)+I(x-2,y-1)+I(x+2,y+1)+I(x+4,y+2); sum7=I(x-4,y-4)+I(x-2,y-2)+I(x+2,y+2)+I(x+4,y+4); sum8=I(x-2,y-4)+I(x-1,y-2)+I(x+1,y+2)+I(x+2,y+4);

13、sumi=sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8;summax=max(sumi);%经过处理后的灰度值,找到他们中最大值summin=min(sumi);%经过处理后的灰度值,找到他们中最小值 summ=sum(sumi); b=summ/8;%若满足(summax+summin+ 4*I(x,y) (3*summ/8) if (summax+summin+ 4*I(x,y) (3*summ/8) sumf = summin;%则该像素点的脊线方向为summin else sumf = summax;%否则为summax end if sumf b%确

14、定完方向后就根据该向场对图像进行二值化 Im(x,y)=128; else Im(x,y)=255; end endend for i=1:m for j =1:n Icc(i,j)=Icc(i,j)*Im(i,j); endend for i=1:m for j =1:n if (Icc(i,j)=128) Icc(i,j)=0; else Icc(i,j)=1; end; end end figure,imshow(double(Icc);title(二值化);得到的二值化图像如图6:图6二值化后的图像2.4图像增强在当前的指纹采集条件下,不可避免的会受到环境,皮肤上的油脂、水分、污渍的影

15、响,使采集到的指纹图像出现纹线粘连、纹线断裂等缺陷,对后续的指纹特征提取带来很大困难。所以我们必须对指纹图像进行图像增强处理,例如分离粘连的纹线,连接断裂的纹线,平滑纹线的边缘等,以保证指纹特征提取的可靠性。实验中进行了初步去除空洞和毛刺的处理,程序如下:u=Icc;m,n=size(u) %去除空洞和毛刺for x=2:m-1for y=2:n-1if u(x,y)=0if u(x,y-1)+u(x-1,y)+u(x,y+1)+u(x+1,y)=3u(x,y)=1;endelse u(x,y)=u(x,y);endendendfigure,imshow(u)%title(去除毛刺)for a

16、=2:m-1for b=2:n-1if u(a,b)=1if abs(u(a,b+1)-u(a-1,b+1)+abs(u(a-1,b+1)-u(a-1,b)+abs(u(a-1,b)-u(a-1,b-1)+abs(u(a-1,b-1)-u(a,b-1)+abs(u(a,b-1)-u(a+1,b-1)+abs(u(a+1,b-1)-u(a+1,b)+abs(u(a+1,b)-u(a+1,b+1)+abs(u(a+1,b+1)-u(a,b+1)=1%寻找端点if (u(a,b+1)+u(a-1,b+1)+u(a-1,b)*(u(a,b-1)+u(a+1,b-1)+u(a+1,b)+(u(a-1,b

17、)+u(a-1,b-1)+u(a,b-1)*(u(a+1,b)+u(a+1,b+1)+u(a,b+1)=0 %去除空洞和毛刺u(a,b)=0;endendendendendfigure,imshow(u)%title(去除空洞)得到的去除毛刺后的图像和再去除空洞后的图像分别如图7和图8: 图7去除毛刺后的图像 图8去除空洞后的图像2.5图像细化二值化后的纹线仍然具有一定的宽度,因为指纹识别只与纹线的走向有关,所以需要对二值图像进行细化,以减少冗余信息,突出纹线的有效特征,便于后续的特征提取。程序如下:v=u;se=strel(square,3);%创建形态学结构元素fo=imopen(v,se

18、);%对图像进行开操作和闭操作v=imclose(fo,se); %对图像进行开操作和闭操作w=bwmorph(v,thin,Inf);%对图像进行细化figure,imshow(w)title(细化图)得到的图像如图9:图9细化后的图像3特征点提取3.1 找出所有的端点和交叉点因为特征点必然是从端点和交叉点里找出,所以在得到细化的图像后,我们首先要找出所有的端点和交叉点。首先对通过定义函数P.m对图像中每个点的8邻域位置进行坐标定义,方便后续编程。P.m程序如下:%-Sub functions-function j = P (img, x, y, i)% get pixel value ba

19、sed on chart:% 4 | 3 | 2% 5 | | 1% 6 | 7 | 8switch (i) case 1, 9 j = img(x+1, y); case 2 j = img(x + 1, y-1); case 3 j = img(x, y - 1); case 4 j = img(x - 1, y - 1); case 5 j = img(x - 1, y); case 6 j = img(x - 1, y + 1); case 7 j = img(x, y + 1); case 8 j = img(x + 1, y + 1);end 然后定义函数point.m来找出细化后

20、图像的所有端点。将一个点的8个邻域依次两两相减并取绝对值,并将所有结果相加,从细化图像的特征来说,和为2时为端点,和为6时为交叉点。程序如下:function txy=point(thin)count = 1;txy(count, :) = 0,0,0;siz=min(size(thin,1),size(thin,2);for x=40:siz - 40 for y=40:siz - 40 if (thin(y, x) ) CN = 0; for i = 1:8 CN = CN + abs (P(thin, y, x, i) - P(thin, y, x, i + 1); end if (CN

21、 = 2) txy(count, :) = x, y,2; count = count + 1; end if (CN = 6) txy(count, :) = x, y,6; count = count + 1; end end end end for i=1:count - 1 x(i) =txy(i, 1); y(i)= txy(i, 2);end imshow(double(thin);hold on;plot(x,y,.);运行完程序后,将所有的端点和交叉点全部找出。定义的数组txy第一项为横坐标,第二项为纵坐标,第三项为2或6(2为端点、6为交叉点)。得到的标出端点和交叉点的图像如

22、图10:图10标出端点和交叉点的细化图像3.2 纹线光滑处理在指纹图像预处理中,已经对指纹图像进行过去除毛刺和空洞的处理。这里通过定义函数guanghua.m进一步对细化后的图像进行光滑处理。基本原理为:找到每个端点,使其沿着纹线的方向移动5个像素,如果在5个像素之内遇到交叉点,则认为此端点为毛刺,去除此点。guanghua.m程序如下:function w=guanghua(thin,txy)for j=1:5 txy=point(thin); pxy=txy(find(txy(:,3)=2),:); n=size(pxy,1); for i=1:n error=0; error=walk(

23、thin,pxy(i,1),pxy(i,2),5); if error=1 thin(pxy(i,2),pxy(i,1)=0; end endendw=thin;imshow(w);光滑后的图像如图11所示:图11 光滑后的图像光滑完后需再次执行point函数来画出新的端点,如下图所示:图12 光滑后标出端点和特征点的图像3.3 去除图像边缘的端点可以看出,在指纹图像的边缘,由于采集仪器的关系,不可避免的多出很多端点,一方面增加了后续工作量,另一方面还可能产生错误,所以有必要将这些边缘的端点去除。本实验中设计了cut函数来进行处理。函数如下:function txy=cut(thin,txy)

24、s(8,8)=0;delta(8,8)=0;n=size(txy,1);for i=1:8 for j=1:8 mpi,j=thin(1+31*(i-1):31+31*(i-1),1+31*(j-1):31+31*(j-1); s(i,j)=sum(sum(mpi,j)/(31*31); mpi,j=(mpi,j-s(i,j).2; delta(i,j)=sum(sum(mpi,j); if delta(i,j)=1+31*(i-1)&txy(k,1)=1+31*(j-1)&txy(k,2)r);pxy2=txy(c,:);pxy2=pxy2(find(pxy2(:,3)=2),:);t=si

25、ze(pxy2,1);if t=0 error=1else plot(x,y,b.); hold on plot(pxy2(:,1),pxy2(:,2),r.); end比如在执行pxy2,error=single_point(txy,20)后,会显示出下图:图14 执行single-point函数后Matlab的显示情况由运行结果可知,有3个端点满足周围半径为20个像素的圆内没有任何端点和交叉点的条件。这三个点在下图中用红点标出。图15 满足条件的特征点3.4.2 walk函数在此,我们还定义了一个walk函数,用于进一步找出特征点,它的作用是判断离某一端点num距离是否有另一端点。函数如下:function error,a,b=walk(thin,x0,y0,num) error=0;thin(y0,x0)=0;t1=0;for n=1:num if error=1 break; else x=x0; y=y0; for x=x0-1:x0+1 if error=1 break; else for y=y0-1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1