计算均方误差时的逻辑错误

时间:2011-03-21 08:24:32

标签: matlab image-processing

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
  3. 任何人都可以清楚地解释为什么会发生这种情况以及补救措施是什么?

1 个答案:

答案 0 :(得分:3)

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

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

如果你开始 一个双=(imread( 'pix1.jpg')); 然后你的MSE几乎为零(我希望它大约为256 * 256 * 3 * eps(即舍入误差))。