【问题标题】:Logical Error when calculating mean square error计算均方误差时的逻辑错误
【发布时间】:2011-07-19 12:25:36
【问题描述】:
a=imread('pic1.jpg');
b=0.25*a;
c=4.0*b;
figure;
imshow(c);
MSE = reshape(mean(mean(((a) - (c)).^2,2),1),[1,3])

代码运行良好,没有任何错误。 a 的大小为 256*256*3 RGB 类型。然而, 有两个问题:

  1. 现在逻辑上,RGB 波段的 MSE 应该为零,因为将结果 c 与 4.0 相乘应该会反转操作。但是 MSE 出来是 1.1361 1.2780 1.2902 在使用 b=0.27.*a 进行测试时观察到的情况相同;然后c=3.703703704.*b;
  2. 在 MSE 公式中,删除双精度数据类型时,错误最小化为 0.5346 0.6132 0.6275

谁能清楚地解释为什么会发生这种情况以及补救措施是什么?

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    查看变量 a 的数据类型。它可能是一个 uint8,这意味着 b 也变成了包含四舍五入值的 uint8 - 换句话说,每个像素丢失了两位信息。

    您提到了“双数据类型”,但我看不到您在代码中使用它的位置。

    如果你从 a=double(imread('pix1.jpg')); 那么您的 MSE 应该几乎为零(我希望它大约为 256*256*3*eps(即舍入误差))。

    【讨论】:

    • “您提到了“双数据类型”,但我看不出您在代码中的何处使用它。”如果我正在使用 uint8,那么在 MSE 公式中,如果我输入 MSE = reshape(mean(mean((double(a) - double(c)).^2,2),1),[1,3]),那么错误值是不同的。这是在我发布查询时观察到的(当 a 是 uint8 类型时),但是在您解释后不再成立。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多