指纹识别最终版

2026/1/25 19:51:38

图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:y0+1

t1=sum(sum(thin(y0-1:y0+1,x0-1:x0+1))); if (t1==0||t1>=2) error=1;

a=x0; b=y0; break; else

if (thin(y,x)==1&&(x-x0)^2+(y-y0)^2~=0)

if (t1>=2 ) error=1; break ; else thin(y,x)=0; x0=x; y0=y; a=x0; b=y0;

plot(x0,y0,'r.') end end end end end end end end

3.4.3 last1函数

综合以上两个找特征点的函数,可以设计一个新的last1函数。通过执行

[pxy3,error2]=last1(thin,r,txy,num)可以找出周围半径为r个像素的圆内没有任何端点或交叉点,并且沿纹线走num个像素内没有另一个端点或交叉点的端点。

程序如下所示:

function [pxy3,error2]=last1(thin,r,txy,num) error=0;

[pxy2,error]=single_point(txy,r); n=size(pxy2,1); l=1; error2=0; for i=1:n

[error,a,b]=walk(thin,pxy2(i,1),pxy2(i,2),num); if error~=1

pxy3(l,1)= pxy2(i,1); pxy3(l,2)= pxy2(i,2);

pxy3(l,3)= pxy2(i,3); l=l+1; error2=0;

plot(pxy2(i,1) ,pxy2(i,2),'r+'); end end

得到的Matlab运行结果显示为:

图16 last1函数的运行结果

得到的图像如下:

图17 执行last1函数后指纹图像的显示

其中红色的端点为满足single_point函数的端点,红色的纹线为沿上述端点走一定距离后的纹线,一部分可以一直走到规定距离(这些即是要找的特征点),还有一部分走到端点或叉点停止。

至此,每幅指纹图像的特征点均可找出。

4.特征点匹配

4.1 纹线长度匹配 上面,我们已经可以找出每幅指纹图像的特征点,并画出一段纹线。下面就是匹配的问题了。在此,我们设置了三层匹配。 首先是纹线长度匹配。对于上面找出的特征点和纹线,每沿着纹线走5个像素测量一下到原始端点的距离。由distance函数得到。

function d=distance(x0,y0,num,thin) num2=fix(num/5); for i=1:num2

[error,a,b]=walk(thin,x0,y0,5*i); if error~=1

d(i)=sqrt((a-x0)^2+(b-y0)^2); else break; end end

最后会得到一个装有长度信息的数组。试想如果两幅指纹图中的指纹是一样的,则它们会包含相同的特征点和从这个特征点出发画出的纹线,则这两个长度数组对应位置的比例应基本相等(考虑到老师所给的24幅指纹图像大小相同,这个比例应近似为1);最终的函数中定义了一个数f=(sum(abs((d1./d2)-1))),所以f值越接近于0,这两幅图像的匹配度越高。

4.2 三角形边长匹配 找到一个特征点后,可以找出距离其最近的2个端点或交叉点,与原特征点构成三角形,若两幅图像的三角形边长比例相等(本实验中都为1),则说明这两幅图像匹配。

其中,找到距离最近的端点的函数find_point如下所示:

function pxy=find_point(x0,y0,txy,num) x=txy(:,1); y=txy(:,2); n=length(x); l(1,n)=0; lnn=1;

pxy(num,:)=[0,0,0]; for i=1:n

l(i)=sqrt((x(i)-x0)^2+(y(i)-y0)^2); end

ll=sort(l); for i=1:num

xiao=ll(i+lnn); nn=find(l==xiao); lnn=length(nn);

pxy(i,:)=[x(nn(1)),y(nn(1)),txy(nn(1),3)];


指纹识别最终版.doc 将本文的Word文档下载到电脑
搜索更多关于: 指纹识别最终版 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219