首页 > 解决方案 > 为什么减法不同?

问题描述

我试图使用 MSE 计算以下图像的相似性:

甲:一个乙:乙丙:C

所有图像都不同,但显然第 1 和第 3 是最相似的。但是,当我尝试使用 numpy 减法计算 MSE 时:

error = np.sum((imageA - imageB) ** 2)
error /= float(imageA.shape[0] * imageA.shape[1]) 

图像 A&B 收到最小的错误(5.5 vs 7.7),这是不正确的。但是,如果我将图像转换为浮点数,则进行减法

err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])

A&C 的错误最小(1607 与 24422)我得到了正确的答案。这会是什么原因?该方法来自的文章提到了它以避免“模运算环绕”,但我也使用了 cv2.subtract ,我认为它避免了这个问题。

标签: pythonnumpyopencv-python

解决方案


没有足够的数据来完全回答这个问题,但我相信这种差异是由表示问题引起的:可能你的图像是uint8类型的,所以减去这些可能会导致溢出问题。


推荐阅读