我尝试按照Fujimoto、Fujisawa 和Ikehara 在此Sub-pixel Shift Estimation of Image 基于相位区域最小二乘近似中提出的方法来直接估计相位区域中的偏移估计(第 26 届欧洲信号处理会议论文集,EUSIPCO '16,第 91-95 页。IEEE,2016 PDF)。这是论文中描述的流程图
如果你仍然和我在一起,当作者尝试用相位差减去整数移位(方程(14)以平滑相位差时,我提出了我的问题。然而,作者确实提到了他们使用传统的仅相位相关(POC)获得了整数移位
这一步怎么做?由于相位差是 ×60矩阵(假设图像尺寸是这样),而整数移位仅包含两个值。斜率究竟是如何获得的?
我实现的完整matlab代码:
function [ output_args ] = phasecorrlsa( refIm, shifIm )
F=(fft2(double(refIm)));
G=(fft2(double(shifIm)));
[m, n]=size(refIm);
[M,N] = meshgrid(1:m,1:n);
X = [M(:), N(:)];
R=(F.*conj(G))./abs(F.*conj(G));
r=(ifft2(R));
[ap, bp, rhat]=lsa(angle(r)); %this is my slope a' and b'
[~,w] = max(r(:));
[del_hat2p, del_hat1p] = ind2sub(size(r),w);
del_hat2p=del_hat2p-1;
del_hat1p=del_hat1p-1;
theta=angle(F)-angle(G);
R=exp(1j*theta); %E6
theta=atan2(imag(R),real(R)); %E9
[a, b, thetahat]=lsa(theta);
del_hat1_ts=(m/(2*pi))*a
del_hat2_ts=(n/(2*pi))*b
thetapp=theta-rhat; %equation 14, I guess something amiss here
%figure;
%surf(theta);
%figure;
%surf(thetapp);
[app, bpp, thetapphat]=lsa(thetapp);
del_hat1=(m/(2*pi))*app+del_hat1p;
del_hat2=(n/(2*pi))*bpp+del_hat2p;
if del_hat1>n/2, del_hat1=del_hat1p-m; end
if del_hat2>m/2, del_hat2=del_hat1p-n; end
output_args=struct('a',del_hat1, 'b', del_hat2);
end
function [ a, b, hat ] = lsa( theta )
[m, n]=size(theta);
[M,N] = meshgrid(1:m,1:n);
X = [M(:), N(:)];
B=regress(theta(:), X);
a=B(1);
b=B(2);
hat=reshape(X*B,m,n);
end
请在这个问题上减轻我的负担。非常感谢!