指纹识别研究
圆内没有任何端点或交叉点,那么随着r的逐渐变大,这样的点会越来越少,也就越来越独特。于是我们设计了一个函数single_point来找出这样的点。 程序如下:
function [pxy2,error]=single_point(txy,r) error=0; x=txy(:,1); y=txy(:,2); n=length(x); d(1:n,1:n)=0; for j=1:n for i=1:n if (i~=j)
d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2); else
d(i,j)=2*r; end end end
[a,b]=min(d); c=find(a>r); pxy2=txy(c,:);
pxy2=pxy2(find(pxy2(:,3)==2),:); t=size(pxy2,1); if t==0 error=1 else
plot(x,y,'b.'); hold on
plot(pxy2(:,1),pxy2(:,2),'r.'); end
比如在执行[pxy2,error]=single_point(txy,20)后,会显示出下图:
16
指纹识别研究
图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;
17
指纹识别研究
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个像素内没有另一个端点或交叉点的端点。
18
指纹识别研究
程序如下所示:
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函数的运行结果
得到的图像如下:
19
指纹识别研究
图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,这两幅图像的匹配度越高。
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Matlab指纹识别(4)在线全文阅读。
相关推荐: