5

下图显示了两个相同半径的圆,用抗锯齿渲染,只是左边的圆水平移动了半个像素(注意圆的水平中心在左边一个像素的中间,在右边的像素边界处)。

如果我执行互相关,我可以在相关数组上取最大值的位置,然后计算移位。但由于像素位置总是整数,我的问题是:

“如何使用 Numpy/Scipy 中的互相关获得两个图像之间的子像素(浮点)偏移?”

在我的脚本中,我使用了scipy.signal.correlate2dor scipy.ndimage.filters.correlate,它们似乎产生了相同的结果。

这里的圆圈只是示例,但我的特定领域特征往往具有亚像素移位,而目前仅获得整数移位给出的结果不太好......

任何帮助都感激不尽!

在此处输入图像描述

4

2 回答 2

4

离散互相关(由那些实现)只能具有单个像素精度。我能看到的唯一解决方案是将二维数组插入到更精细的网格(上采样)。

这是关于 DSP 关于互相关之前上采样的一些讨论。

于 2012-12-05T23:08:54.553 回答
4

我遇到了一个非常相似的问题,也有移位的圆圈,偶然发现了一个很棒的 Python 包,由 Adam Ginsburg 称为“图像注册”。它为您提供亚像素 2D 图像偏移,并且速度相当快。我相信这是一个流行的 MATLAB 模块的 Python 实现,它只对 x 相关峰值附近的图像进行上采样。

看看:https ://github.com/keflavich/image_registration

我一直在使用“chi2_shifts.py”,效果很好。

于 2015-01-28T11:17:35.310 回答