基于对数极点 DFT 的尺度不变图像配准

信息处理 图像处理 自由度 opencv
2022-01-04 13:50:05

我正在尝试使用Reddy Chatterji 论文中描述的相位相关进行图像配准。在我的情况下,图像可以相对于彼此进行缩放和平移。

据我了解,查找相对比例的算法是(参见:论文中的流程图):

F1 = DFT(I1)
F2 = DFT(I2)
H1 = Highpass(F1)
H2 = Highpass(F2)
L1 = LogPolar(Magnitude(H1))
L2 = LogPolar(Magnitude(H2))
PC = PhaseCorrelate(L1,L2)
PM = norm(PC)
R = IDFT(PhaseCorr/PM)
P = Peak(R)
Scale = LogBase^P[1]

Scale 给了我看似荒谬的值(从图像到图像的差异很大,而且从不正确)。

但忽略尺度,相同的相位相关方法适用于平移;所以我怀疑我的对数极坐标变换有问题。这是一个例子,我已经解决了翻译问题——左图是原图,右图已被裁剪和翻译——解决方案显示在原图的顶部:

单独翻译有效

对于对数极坐标变换,我首先变换到极坐标空间:

I^(ρ,θ)=I(r+ρcos(2πθNθ),rρsin(2πθNθ))
其中 I 是原始图像,r 是图像半径(半角),Nθθ 方向的样本数。然后我从中采样以转换为对数极坐标空间:
I^log(ρ,θ)=I^(logb(ρ), theta)
其中 b=(2r)Nρ
1所述,因此它跨越整个极地空间。

这是对数极坐标空间中的示例图像,ρ=θ=256(以防出现明显错误):

记录极地

最后,这显示了在相位相关步骤之前图像经过的实际变换(顶部是高通滤波器后的 DFT 幅度,底部是对数极坐标空间中的幅度):

DFT 的对数极坐标

我正在使用 OpenCV,它具有 LogPolar 和 PhaseCorrelate 方法。虽然 PhaseCorrelate,就像我的手动实现一样,为我提供了正确的翻译答案,但它在规模上是不正确的。由于使用 OpenCV LogPolar 或我自己的不会影响正确性,所以我一定遗漏了一些东西。

任何帮助,将不胜感激。

2个回答

如果您想要一些真正强大的东西,但计算成本可能更高,您可能想查看我在此处实现的算法。它实现了论文“使用对数极坐标变换的鲁棒图像配准”(pdf)。除了平移和尺度不变之外,它还具有旋转不变的优点。在我的应用程序(艺术)中,它甚至能够注册看起来相似的图像,而不仅仅是同一图像的转换版本。

我想这是由于具体的实施问题。例如,(1)最好在DFT之前进行加窗预处理;(2) 可以查看 Highpass() 函数,可以参考 Reddy Chatterji 的论文 Eq.(23)-(24) 中的那个。此外,刻度值有限制,您可以尝试其他刻度值。