使用傅立叶变换进行移位估计

信息处理 matlab fft 傅里叶变换 阶段
2022-02-10 09:45:56

如果我有两个相同场景的图像,参考图像和移位图像,移位可以在 x 或 y 方向,我想使用傅立叶变换的移位属性来估计移位。

S1 = fftshift(fft2(im1)); % Fourier transform of the reference image
S2 = fftshift(fft2(im2)); % Fourier transform of the image to be registered
Q = S1./S2;
A = angle(Q);

我如何使用相移A来估计两个方向的偏移?

3个回答

假设图像为 256x256,空间域中的偏移对应于频域中的线性相位。

u=-128:127;
v=-128:127;
u=repmat(u,size(u,2),1);
v=repmat(v',1,size(v,2));

linear_phase= exp(-2*pi*1i.*(((v).*dy)+((u).*dx)));

dx移入移入等于所以我可以得到很多方程来求解xdyyAlinear_phasedxdy

如果dxordy,则偏移是0.5/128xy

相位相关法可用于估计偏移。

Q = (S1.*conj(S2)) ./ abs(S1.*conj(S2));
Qi = ifft2(Q);

最大条目的位置Qi将为您提供移位量。

这应该回答你的问题(主要是你的符号):

Q=S1|S1|S2|S2|=ei(kxΔx+kyΔy)

这个量是傅里叶空间中的相位。由于图像空间中的位移会导致傅立叶空间中的线性相位,因此您最终会在此处得到相位因子。请注意,幅度S1S2是相同的 - 如果您在图像空间中有翻译,则只有相位不同。

如果你变身Q通过傅里叶逆变换回到图像空间,您最终会得到一个到处都是零的图像,并且应该只在一个位置有一个强峰值。这个峰值,相对于图像的中心像素,为您提供了变化ΔxΔy,即如果您的图像中心位于像素 (128, 128) 并且您获得的峰值位于 (130, 124) 处,则图像移动了Δx=2px, 和Δy=4px.

请注意,您必须将 Q 转换回图像空间。傅立叶空间中的相位分​​布本身对您的应用价值不大!