据我所知,用于找到相对刻度的算法是(请参阅:论文流程图):
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之前执行适当的窗口预处理。
在找到那篇论文的前两天,我一直在尝试实现该算法,但没有成功。我想知道您是否可以与初学者分享您的实现:)