首页 > 解决方案 > 找出两个 numpy 矩阵的相似程度

问题描述

我想知道两个 numpy 矩阵有多大不同。Matrix1 和 Matrix2 可能非常相似,例如 80% 相同的值,但只是移位了……我在右上角附加了两个相同数组的图像,它们在一些值序列中有所不同。

from skimage.util import compare_images
#matrix1 & matrix2 are numpy arrays
compare_images(matrix1, matrix2, method='diff')

比较图像

给我第一个比较,但是两个 numpy 矩阵呢,例如,其中一个矩阵左移了几列?

from scipy.signal import correlate2d
corr = correlate2d(matrix1, matrix2)
plt.figure(figsize=(10,10))
plt.imshow(corr)
plt.grid(False)
plt.show()

打印出相关性,这似乎是一个不错的方法,但我不明白结果是如何显示的,因为差异在图像的右上角。

相关2d

否则:

picture1_norm = picture1/np.sqrt(np.sum(picture1**2))
picture2_norm = picture2/np.sqrt(np.sum(picture2**2))
print(np.sum(picture2_norm*picture1_norm))

返回相似度范围为 0-1 的值;例如 0.9942。

有什么好的方法?

标签: pythonnumpyimage-processingscipyscikit-image

解决方案


两个矩阵之间的相关性是衡量两者相似程度的合理衡量标准。如果两者都包含相同的值,则(标准化)相关性将为 1,并且您的(最大值?)值 0.9942 已经非常接近该值。关于结果的平移(不变)方差,请仔细查看其mode参数,该参数scipy.signal.correlate2d定义了如何沿矩阵的两个轴处理不同的大小,以及在计算相关性时将一个矩阵滑过另一个矩阵的距离。


推荐阅读