如何用scipy实现亚像素精度的图像互相关

2024-05-23 17:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

这里的圆圈只是例子,但我的领域特定的特点往往有亚像素的位移,目前只得到整数位移是给出的结果,不是很好。。。

任何帮助都将不胜感激!

enter image description here


Tags: 图像numpy脚本signal半径水平整数像素
2条回答

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

Here's在DSP上关于互相关前上采样的一些讨论。

我遇到了一个非常类似的问题,也有移位的圆,偶然发现了一个伟大的Python包,叫做Adam Ginsburg的“图像注册”。它给你亚像素的二维图像移动,而且相当快。我相信这是一个流行的MATLAB模块的Python实现,它只在x相关峰值附近对图像进行上采样。

检查一下:https://github.com/keflavich/image_registration

我一直在用“chi2-shifts.py”效果很好。

相关问题 更多 >