如何使用Scipy以亚像素精度执行图像互相关

hel*_*ker 5 python image-processing scipy cross-correlation

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

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

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

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

这里的圆圈只是示例,但是我特定于域的功能倾向于具有亚像素偏移,并且当前仅获得整数偏移会导致效果不佳...

任何帮助都感激不尽!

在此处输入图片说明

tia*_*ago 4

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

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