直接在相位区域估计亚像素偏移

信息处理 图像处理 matlab 估计 图像配准
2022-01-24 15:08:22

我尝试按照Fujimoto、Fujisawa 和Ikehara 在此Sub-pixel Shift Estimation of Image 基于相位区域最小二乘近似中提出的方法来直接估计相位区域中的偏移估计(第 26 届欧洲信号处理会议论文集,EUSIPCO '16,第 91-95 页。IEEE,2016 PDF)。这是论文中描述的流程图

在此处输入图像描述

如果你仍然和我在一起,当作者尝试用相位差减去整数移位(方程(14)以平滑相位差时,我提出了我的问题。然而,作者确实提到了他们使用传统的仅相位相关(POC)获得了整数移位θ(k1,k2)(a,b)

这一步怎么做?由于相位差是 ×60矩阵(假设图像尺寸是这样),而整数移位仅包含两个值。斜率究竟是如何获得的?60×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

请在这个问题上减轻我的负担。非常感谢!

1个回答

我无法评论您的 Matlab 代码,但 eq。(14) 对我来说似乎很简单。您有一个相位差场,它取决于两个空间波数分量,并形成一个包裹平面。您寻求的偏移是该平面的斜率,表示为两个标量分量由于相位缠绕,斜率被分解为整数和小数部分,等。(14) 您通过减去因整数部分引起的相位来获得剩余相位场。需要实际的值,而不仅仅是θk1k2aba=a+a(a,b)k(ak1+bk2)k指数。计算值类似于为一维傅里叶频谱分析制作频率轴。k