python - 为什么减法不同?
问题描述
我试图使用 MSE 计算以下图像的相似性:
所有图像都不同,但显然第 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 ,我认为它避免了这个问题。
解决方案
没有足够的数据来完全回答这个问题,但我相信这种差异是由表示问题引起的:可能你的图像是uint8
类型的,所以减去这些可能会导致溢出问题。
推荐阅读
- javascript - 循环和测试正则表达式对象的最佳和最有效的方法是什么
- tensorflow.js - 将 tf_op_layers 转换为 tfjs
- javascript - 如何从单独的文件中以角度重用或调用函数?
- python - 在Python中将整数转换为日期格式MDD到'M / DD'
- javascript - Javascrip 的 Jinja2 变量给出了 Undefined 类型的对象
- verilog - 如果将默认案例添加到完整案例语句中会发生什么?
- java - 添加 Firebase Analytics 时 Android 无法构建
- php - 以浮动形式向上取整价格值
- python - 如何为迭代添加的补丁添加颜色条?
- ruby-on-rails - 从控制器中提取方法的位置(控制器行太多)