相位相关和负移

信息处理 fft 傅里叶变换 自由度 阶段 相关性
2022-02-15 22:49:16

我正在实施相位相关算法来确定两个图像之间的偏移。

它通常有效,但我不确定如何解释由此产生的转变。

伪代码:

ft1 = FT(input1)
ft2 = FT(input2)

for each pixel p
  product = ft1[p] * conj(ft2[p])
  cross_power[p] = product / abs(product)

cross_correlation = IFT(cross_power)

其中 FT 和 IFT 分别是离散傅里叶变换及其逆变换。

以下是取自维基百科的输入图像和产生的相位相关性:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

峰值位于 (20, 21),对应于第二个图像的移动。

我得到了类似的结果,但结果却是颠倒的:

在此处输入图像描述

当我翻转输入图像时,峰值出现在相位相关图像的左上角,但是如何将其解释为负偏移(-20,-21)?基于图像象限?

我正在使用 Math.NET Numerics 包中的傅立叶变换例程。它只提供 1D FT,所以我先对行进行转换,然后再对列进行转换以获得 2D FT。

如何从峰值位置提取偏移并允许负偏移?

为什么我的结果中的峰值位置不同?

2个回答

问题是由于这个:

product = ft1[p] * conj(ft2[p])

您可以更改为:

product = ft2[p] * conj(ft1[p])

我猜 input1 是参考图像。

如何从峰值位置提取偏移并允许负偏移?

结果可以按照您的建议用象限来解释,因为它遵循周期性边界条件。

在伪代码中,其中 xtrans,ytrans 是峰值的位置:

if xtrans > imgwidth/2: xtrans = -(imgwidth-xtrans)
if ytrans > imgheight/2: ytrans = -(imgheight-ytrans)