频谱细节MATLAB代码

时间:2015-02-04 21:00:24

标签: matlab fingerprint

我对指纹验证感兴趣,并且我正在尝试从[ref1]实现光谱细节描述符。

[ref1] Xu,H.,Veldhuis,R.,Bazen,A.M。,Kevenaar,T.A.,Akkermans,T.A。,& Gokberk,B。(2009)。使用光谱细节表示的指纹验证。信息取证与安全,IEEE Transactions on,4(3),397-409。 (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.353.1031

这在我的代码函数中。我在一个简短的细节列表上测试了它,但结果与[ref1]中发布​​的结果非常不同。我不认为问题只是参数设置。我绘制了计算和插值的ML和MO描述符,但图像非常不同。 任何人都可以帮我代码吗? 我的MATLAB代码是:

function SpectralMinutiae
%minutie vector: xposition,yposition,orientation (30 minutiae)
minuVect= [50 75 -2.35619449019235;130 95 2.35619449019235;88 101 2.61799387799149;78 157 -2.35619449019235;189 172 -2.61799387799149;253 204 -2.35619449019235;118 217 2.61799387799149;116 229 -2.61799387799149;135 249 2.61799387799149;232 16 -0.523598775598299;193 25 -0.523598775598299;87 43 3.14159265358979;229 44 -0.523598775598299;64 64 -2.61799387799149;254 72 2.09439510239320;258 77 -1.57079632679490;138 83 0;230 86 2.35619449019235;40 116 0.785398163397448;206 126 -0.785398163397448;138 147 -1.04719755119660;137 163 2.09439510239320;227 173 -1.57079632679490;205 174 -2.09439510239320;162 176 -2.35619449019235;106 185 -1.57079632679490;243 187 -2.09439510239320;118 198 2.61799387799149;102 202 -1.04719755119660;163 211 -2.09439510239320];
%parameters
imageSize=300;
sigmaMG=3.2; %only for plot purposes
sigmaML=1; %0 from the paper
sigmaMO=4.25;
lambdaL=0.1;
lambdaH=0.6;

% plot minutiae in the spatial domain 
lx=linspace(1,imageSize,imageSize);   
[x,y]=meshgrid(lx,lx);  % //mesh
numMinu=size(minuVect,1);

z=MG(x,y,minuVect,numMinu,sigmaMG);
figure(1);
surf(x,y,z);shading interp;


%plot ML and MO functions (Fourier domain)
windowSize=5; 
flx=linspace(-windowSize,windowSize,300);
fly=linspace(-windowSize,windowSize,300);

[ux,uy]=meshgrid(flx,fly);  % //mesh
zML=ML(ux,uy,minuVect,numMinu,sigmaML);
figure(2);
imagesc(abs(zML)); title('Fourier Domain Image ML'); 

zMO=MO(ux,uy,minuVect,numMinu,sigmaMO);
figure(3);
imagesc(abs(zMO)); title('Fourier Domain Image MO'); 


%plot ML and MO functions in the Log-polar space

%In the radial direction M = 128 samples are used between lambdaL and lambdaH
%In the angular direction N = 256 samples are used between  0 and 2pi

rcoords = linspace(lambdaL,lambdaH,128);
thcoords = linspace(0,pi,256);
[ri,thi] = meshgrid(rcoords,thcoords);
[lx,ly] = pol2cart(thi,exp(ri)); 
figure(4);
z=ML(lx,ly,minuVect,numMinu,sigmaML);
imagesc(abs(z)); title('ML Polar coordinates'); 
figure(5);
z=MO(lx,ly,minuVect,numMinu,sigmaMO);
imagesc(abs(z)); title('MO Polar coordinates'); 

%plot ML and MO functions in the Log-polar space (obtained by interpolation)
z = interp2(ux,uy,zML,lx,ly);
figure(6);
imagesc(abs(z)); title('ML Polar coordinates (interpolated)'); 

z = interp2(ux,uy,zMO,lx,ly);
figure(7);
imagesc(abs(z)); title('MO Polar coordinates (interpolated)'); 

end

%Spatial domain function 
function z=MG(x,y,minuVect,numMinu,sigma)
    amplitude = 1.0 / (sigma * sqrt(2.0*pi));
    z = zeros(size(x));
    for j = 1:numMinu
         z= z + exp(-((x-minuVect(j,1)).^2+(y-minuVect(j,2)).^2)/( 2* sigma^2)) ;
    end;
    z=z.*amplitude;

end


%ML Fourier domain function 
function z=ML(ux,uy,minuVect,numMinu,sigma)
    z = zeros(size(ux));
    z = complex(z,0);
    for j = 1:numMinu
         z= z + exp(-1j*((ux*minuVect(j,1))+(uy*minuVect(j,2)))) ;
    end;
    den=-(sigma^(-2))*2;
    z=z.*exp((ux.^2+uy.^2)/den);   
end


%MO Fourier domain function 
function z=MO(ux,uy,mu,numMinuzie,sigma)
    z   = zeros(size(ux));
    z = complex(z,0);
    for j = 1:numMinuzie
         z= z + 1j*(ux*cos(mu(j,3))+uy*sin(mu(j,3))) .* exp(-1i*(ux*mu(j,1)+uy*mu(j,2))) ;
    end;
    z=z.*exp(-(ux.^2+uy.^2)/(2*(sigma^(-2))));

end

我认为函数ML和MO有错误,但我找不到它。我想知道是否有人能够帮助我。

1 个答案:

答案 0 :(得分:0)

代码中的频率字段在哪里?对于论文中的傅里叶变换,您必须使用欧米茄术语即频率术语。