for j =1:n
Icc(i,j)=Icc(i,j)*Im(i,j); end end
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 g3=Icc;
%***************************************************************************** %去空洞和毛刺 u=Icc;
[m,n]=size(u); %去空洞和毛刺 for x=2:m-1 for y=2:n-1 if u(x,y)==0
if u(x,y-1)+u(x-1,y)+u(x,y+1)+u(x+1,y)>=3 u(x,y)=1; end
else u(x,y)=u(x,y); end end end
for a=2:m-1 for b=2:n-1 if u(a,b)==1 if
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)+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; end end
36
end end end g4=u;
%***************************************************************************** %细化 v=~u;
se=strel('square',3); fo=imopen(v,se);
v=imclose(fo,se); %对图像进行开操作和闭操作 w=bwmorph(v,'thin',Inf);%对图像进行细化 G=w; end
37
附件2 指纹匹配函数代码
1.特征匹配
(1)zhiewnpipei1()函数
function [ error ] = zhiwenpipei1( pxy31,pxy32,thin1,thin2,txy1,txy2) error=1; num=20; cxy1=pxy31; cxy2=pxy32;
d1=distance(cxy1(1,1),cxy1(1,2),num,thin1); d2=distance(cxy2(1,1),cxy2(1,2),num,thin2); f=(sum(abs((d1./d2)-1))); if f<=0.05 error1=0; else
error1=1; end
c11=find_point(cxy1(1,1),cxy1(1,2),txy1,1); c12=find_point(cxy1(1,1),cxy1(1,2),txy1,2); c21=find_point(cxy2(1,1),cxy2(1,2),txy2,1); c22=find_point(cxy2(1,1),cxy2(1,2),txy2,2); cxy1(2,:)=c11; cxy1(3,:)=c12(2,:); cxy2(2,:)=c21; cxy2(3,:)=c22(2,:);
x11=cxy1(1,1); y11=cxy1(1,2); x12=cxy1(2,1); y12=cxy1(2,2); x13=cxy1(3,1); y13=cxy1(3,2); x21=cxy2(1,1); y21=cxy2(1,2); x22=cxy2(2,1); y22=cxy2(2,2); x23=cxy2(3,1); y23=cxy2(3,2); dd1(1)=juli(x11,y11,x12,y12); dd1(2)=juli(x12,y12,x13,y13); dd1(3)=juli(x13,y13,x11,y11); dd2(1)=juli(x21,y21,x22,y22); dd2(2)=juli(x22,y22,x23,y23); dd2(3)=juli(x23,y23,x21,y21); ff=(sum(abs((dd1./dd2)-1))); if ff<=0.05 error2=0; else error2=1; end
cxy1(2:41,:)=find_point(pxy31(1,1),pxy31(1,2),txy1,40);
38
cxy2(2:41,:)=find_point(pxy32(1,1),pxy32(1,2),txy2,40); f11=length(find(cxy1(:,3)==2)); f12=length(find(cxy1(:,3)==6)); f21=length(find(cxy2(:,3)==2)); f22=length(find(cxy2(:,3)==6)); fff=abs(f11-f21)/(f11+f12); if fff<=0.05 error3=0; else
error3=1; end
if(error1==0&&error2==0&&error3==0) error=0; else error=1; end end
(2)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
(3)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);
39
nn=find(l==xiao); lnn=length(nn);
pxy(i,:)=[x(nn(1)),y(nn(1)),txy(nn(1),3)]; end
(4)juli()函数
function [d] = juli(x1,y1,x2,y2 ) d=sqrt((abs(x1-x2)).^2+(abs(y1-y2)).^2); end
2.特征点提取及找特征点函数 (1)tezhengdiantiqu()函数
function [G2,txy,pxy] = tezhengdiantiqu( thin ) [m n]=size(thin); txy=point(thin);
[w,txy]=guanghua(thin,txy); thin1=w; G2=thin1;
txy=cut(thin1,txy);
[pxy,error2]=last1(thin1,8,txy,20); end
(2)point()函数
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 == 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);
40