我尝试将两幅图像互相关,通过寻找最大相关值,从而在第一幅图像上定位模板图像。我画了一幅具有一些随机形状的图像(第一张图),然后剪下其中一个形状(模板)。现在,当我使用scipy的correlate2d,并在相关性中找到具有最大值的点时,出现了几个点。根据我的知识,重叠不应该只有一个点最大吗?
这个练习背后的想法是提取图像的某个部分,然后将其与数据库中以前的一些图像相关联,然后我应该能够根据相关性的最大值在以前的图像上定位这个部分。
我的代码看起来像这样:
from matplotlib import pyplot as plt
from PIL import Image
import scipy.signal as sp
img = Image.open('test.png').convert('L')
img = np.asarray(img)
temp = Image.open('test_temp.png').convert('L')
temp = np.asarray(temp)
corr = sp.correlate2d(img, temp, boundary='symm', mode='full')
plt.imshow(corr, cmap='hot')
plt.colorbar()
coordin = np.where(corr == np.max(corr)) #Finds all coordinates where there is a maximum correlation
listOfCoordinates= list(zip(coordin[1], coordin[0]))
for i in range(len(listOfCoordinates)): #Plotting all those coordinates
plt.plot(listOfCoordinates[i][0], listOfCoordinates[i][1],'c*', markersize=5)
字符串
这将生成图形:Cyan stars are points with max correlation value (255)。
我期望在“corr”中只有一个点具有最大相关值,但出现了几个。我尝试过使用不同的相关模式,但都无济于事。
This is the test image I use when correlating的一个。
This is the template, cut from the original image的函数。
有谁能给予我我在这里做错了什么?
2条答案
按热度按时间5jdjgkvh1#
应用
字符串
在计算2D互相关
corr
之前,应该给予预期的结果。清理代码,举一个完整的例子:
型
vcudknz32#
您可能溢出了numpy类型uint8。请尝试使用:
字符串
未经测试。