我正在尝试使用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]


刻度给我看似无意义的值(每个图像之间存在巨大差异,并且永远无法校正)。

但是忽略比例,相同的相位相关方法可以很好地完成翻译;所以我怀疑我的对数极坐标变换有问题。这是一个示例,其中我已解决翻译问题-左边的图像是原始图像,右边的图像已被裁剪和翻译-该解决方案显示在原文上方:



对于对数极坐标变换,我首先变换到极坐标空间:
$$
\ hat {I}(\ rho,\ theta)= I \ left(r + \ rho \ cos \ left(\ frac {2 \ pi \ theta} {N _ {\ theta}} \ right),r- \ rho \ sin \ left(\ frac {2 \ pi \ theta} {N _ {\ theta}} \ right)\ right)
$$
其中$ I $是原始图像,$ r $是图像半径(半宽),$ N _ {\ theta} $是样本数沿$ \ theta $方向。然后,我从中采样以转换为对数极坐标空间:
$$$
\ hat {I} _ {log}(\ rho,\ theta)= \ hat {I} \ left(\ log_ { b}(\ rho),\ theta \ right)
$$
其中$ b =(2r)^ {-N _ {\ rho}} $如1中所述,从而跨越整个极地

这是对数极性空间中的示例图像,其中$ \ rho = \ theta = 256 $(以防万一出现明显错误):



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


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

任何帮助将不胜感激。

评论

你知道出什么问题了吗?

@ Mr.WorshipMe很遗憾,不是。
@德鲁·康明斯(Drew Cummins),我想这是由于您使用的测试图像所致,因为与背景之间存在明显的过渡。其他测试图像怎么样?另外,从最后一张图看,两个量值之间存在明显差异,因此最好在DFT之前执行适当的窗口预处理。

在找到那篇论文的前两天,我一直在尝试实现该算法,但没有成功。我想知道您是否可以与初学者分享您的实现:)

#1 楼

如果您想要真正强大的功能,但是在计算上可能会更昂贵,那么您可能想看看我在这里实现的算法。它实现了论文“使用对数极性变换进行稳健的图像配准”(pdf)。除了平移和缩放不变外,它还具有旋转不变的优点。在我的应用程序(艺术)中,它甚至可以注册外观相似的图像,而不仅仅是相同图像的转换版本。

#2 楼

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