光谱细节MATLAB代码
我对指纹验证感兴趣,我正在尝试实现[参考文献1]中的光谱细节描述符 [参考文献1]徐,H.,韦尔杜伊斯,R.,巴赞,A.M.,凯夫纳,T.A.,阿克曼斯,T.A.,和戈克伯克,B.(2009)。使用光谱细节表示的指纹验证。信息取证与安全,IEEE交易,第4(3)页,397-409页。() 这是我的代码函数。我在一个简短的细节列表上对其进行了测试,但结果与[参考文献1]中公布的结果大不相同。我不认为问题仅仅在于参数设置。我绘制了计算和插值的ML和MO描述符,但图像非常不同。 有人能帮我写代码吗? 我的MATLAB代码是:光谱细节MATLAB代码,matlab,fingerprint,Matlab,Fingerprint,我对指纹验证感兴趣,我正在尝试实现[参考文献1]中的光谱细节描述符 [参考文献1]徐,H.,韦尔杜伊斯,R.,巴赞,A.M.,凯夫纳,T.A.,阿克曼斯,T.A.,和戈克伯克,B.(2009)。使用光谱细节表示的指纹验证。信息取证与安全,IEEE交易,第4(3)页,397-409页。() 这是我的代码函数。我在一个简短的细节列表上对其进行了测试,但结果与[参考文献1]中公布的结果大不相同。我不认为问题仅仅在于参数设置。我绘制了计算和插值的ML和MO描述符,但图像非常不同。 有人能帮我写代码吗?
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中有一个错误,但我找不到它。我想知道是否有人能帮助我 代码中的频率项在哪里?对于论文中的傅里叶变换,必须使用ω项,即频率项。在[ref1]的等式15中,ω项用ωx和ωy表示。在我的代码中,等式15由函数ML(ux,uy,minuVect,numinu,sigma)建模,频率项为ux和uy。我认为这是可以的,不是吗?我认为你在空间域函数中缺少了“-I”项(虚项)。根据[ref1]中的等式14,空间域函数(我的代码中的MG)没有一个不重要的部分。MG根据[参考文献2]中的方程式1实施。[参考文献2]徐海云和R.Veldhuis。“指纹识别的复杂光谱细节表示”,《计算机视觉和模式识别研讨会》(CVPRW),2010年IEEE计算机学会年会。IEEE,2010年。