这是我尝试的方式: (1)使用PIL.Image打开原始(比如100 * 100)和目标(比如20 * 20)图像并将它们转换为np.array; (2)从原始像素中的每个像素开始作为起始位置,裁剪20 * 20区域并将每个像素RGB与目标进行比较。 (3)如果总差异低于某一给定水平,则停止并输出原始差异中的特定起始像素位置。
问题是,步骤(3)的成本超过10秒,这太长了,即使步骤(2)花费超过0.04秒,我希望优化我的程序。在我用于迭代数组的两个步骤中,有更有效的方法吗?
答案 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
如果您不想使用工具箱,可以自己实现互相关。