如何判断一个图像是否是Python中另一个图像的一部分?

时间:2018-01-15 08:27:06

标签: python image

这是我尝试的方式: (1)使用PIL.Image打开原始(比如100 * 100)和目标(比如20 * 20)图像并将它们转换为np.array; (2)从原始像素中的每个像素开始作为起始位置,裁剪20 * 20区域并将每个像素RGB与目标进行比较。 (3)如果总差异低于某一给定水平,则停止并输出原始差异中的特定起始像素位置。

问题是,步骤(3)的成本超过10秒,这太长了,即使步骤(2)花费超过0.04秒,我希望优化我的程序。在我用于迭代数组的两个步骤中,有更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

要比较不同位移的两个信号(或图像),可以使用cross-correlation

如果您拥有scipy包,则可以使用2D互相关来衡量当滑动一个图像而另一个图像时两个图像的相似程度。 此示例是从correlate2d函数复制的:

from scipy import signal
from scipy import misc
lena = misc.lena() - misc.lena().mean()
template = np.copy(lena[235:295, 310:370]) # right eye
template -= template.mean()
lena = lena + np.random.randn(*lena.shape) * 50 # add noise
corr = signal.correlate2d(lena, template, boundary='symm', mode='same')
y, x = np.unravel_index(np.argmax(corr), corr.shape) # find the match

如果您不想使用工具箱,可以自己实现互相关。