我已经成功测试了一维相位相关算法以确定两个合成图像之间的垂直偏移。

当我移至真实图像时,它根本无法检测到平移(峰值位于0 ,这是错误的结果)。

我有以下图像:



以及由此产生的相位相关性(幅值,实数,虚数) :







图像的第一条扫描线是完全白色的,但偏移是明显更大(20像素)。

预期的结果是第20行出现白线,仅在合成图像或光噪声时发生。

我的算法非常简单-每个算法图像列:


计算源图像列和目标图像列的1D FT(a=FT(A)b=FT(B)
计算交叉功率谱(cross_power = a *. conj(b) / |a *. conj(b)|)-*.表示逐点乘法,conj(x)表示复数共轭物
计算机相位相关(phase = IFT(cross_power)
phase的每一列中查找最大幅度。
查找共有峰位置(例如

您能建议我如何改善基线相位相关算法来处理现实世界(嘈杂)图像吗?

我应该使用NCC吗? (归一化互相关)而不是基于FFT的相位相关?


UPDATE

我正在尝试零填充以排除由循环移位引入的误差(仅最好进行简单的图像线性移动),并在Wikipedia的原始图像上对此进行了测试:




但是-如果我执行轻微的平滑处理(高斯模糊)以减少噪声并实际改善结果,则相位相关性将完全被破坏:





这是增强版-原始峰较弱(为什么?),并且在零位移附近出现了新峰(为什么?):



评论

如我所见,在与相位相关的图像上,最大峰值显示相应的偏移。但是,我不知道这些图像之间的互相关的真正幅度是多少。

@Eddy_Em我将为实部和虚部生成单独的图像,并在一段时间内将其添加到帖子中。到目前为止,只有幅度信息。

您在Wikipedia中的引用说要使用2D傅里叶变换。为什么要使用一维变换?

好,是的,但是您需要将苹果与苹果进行比较。仅比较每个图像中的相同列将无法获得所需的结果。如果移动足够大,则列之间没有任何关联。您需要考虑整个图像。一种可行的方法是对两个图像中的行求和,然后在其中进行一维处理。

@PeterK。这是2D的-我检查了相位相关性,就像Wiki文章中一样,只是翻转了(可能是由于在计算交叉功率谱或输入/输出翻转时翻转了乘法器)。我发现平滑(高斯窗)确实会损害最终结果,但不确定为什么。我最终将改为使用归一化互相关,因为在处理低频数据时,相位相关似乎很弱。

#1 楼

一维版本

您列出的一维版本不起作用。如果图像有足够大的偏移(实际图像中超过一两个像素),则列像素将没有任何关联。

例如,请尝试:

I5 = rand(100,100)*255;
I6 = zeros(100,100);
I6(11:100,22:100) = I5(1:90,1:79);


这样我们就有了I5:



和I6:



则一维相位相关为:



而二维相位相关为:



很难看到,但是图像的右下角有一个很高的峰。一维版本中没有清晰的峰值。

为什么没有平滑帮助? #1

相关性正在尝试做的是在每个图像中找到“相似”的变化。如果基础信号足够随机,那么它将很好用:白噪声与其自身的相关性在原点处给出一个非常好的峰值,而在其他地方则接近零。

使“随机”平滑”具有高斯分布的图像将具有使您期望的相关性变得平滑的效果-将能量分布在更宽的区域内的任何峰中。图片。预先加白(顾名思义)试图使图像更像白噪声---如果我们进行基于相关的检测(因为峰值定位良好),则图像具有最佳形式。

更好的选择是使用matlab diff操作来简化图像的方式,但效果出乎意料,非常令人惊讶。

请参见此示例。

为什么不平滑帮助? #2

为什么平滑会导致多余的峰值?

如果用内核$ k(x,y)$平滑每个图像,那么我们得到:
$$
h_a = g_a \ star k \\
h_b = g_b \ star k
$$
其中$ \ star $是卷积。

现在,
$$
H_a = K G_a \\
H_b = K G_b \\
R = \ frac {H_a H_b ^ *} {| H_a H_b ^ * |} = \ frac {| K | ^ 2G_a G_b ^ * } {| K | ^ 2 | G_a G_b ^ * |} \\
= \ frac {G_a G_b ^ *} {| G_a G_b ^ * |}
$$

我怀疑正在发生的事情(尽管我不确定)是您的内核在频域中的值接近零,从而导致数值问题?

如果我应用内核:

K = one(5,5);


到我的随机图像,然后我得到:



二维相关性,使得峰值更多分散,但不会出现您所看到的问题。

评论


$ \ begingroup $
好答案,谢谢!我的问题是峰不仅定位不当,而且出现在完全错误的位置。我最终阅读了JPLewis:“快速归一化互相关”,它说相位相关会在不同位置改变图像能量而带来麻烦,因此应该应用预滤波-尽管有任何高通,但建议使用拉普拉斯滤波器进行信号白化过滤器会做。问题仍然是截止频率事先未知,并且阈值太高或太低都会再次损害匹配。但是我会尝试的。
$ \ endgroup $
– Libor
13年4月27日在20:56



$ \ begingroup $
离题:有趣的是Google搜索“信号美白”会教给您很多有关牙膏的知识:D
$ \ endgroup $
– Libor
13年4月27日在20:57

#2 楼

通过使信号变白来从相位相关中获得良好性能的最简单方法是获取幅度的对数。您也可以从结果相关表面滤除噪声。有关详细信息,请参阅“改善图像配准的相位相关性”,(ICVNZ2011)图像和视觉计算新西兰会议录,2011年,第488-493页,http://www98.griffith.edu.au/dspace/bitstream/handle/ 10072/44512 / 74188_1.pdf?sequence = 1