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.1361 1.2780 1.2902
使用b=0.27.*a
进行测试时观察到同样的情况。然后c=3.703703704.*b
; 0.5346 0.6132 0.6275
任何人都可以清楚地解释为什么会发生这种情况以及补救措施是什么?
答案 0 :(得分:3)
查看变量a的数据类型。它可能是一个uint8,这意味着b也变成了包含舍入值的uint8 - 换句话说,你每个像素丢失两位信息。
你提到“双数据类型”,但我看不到你在代码中使用它的位置。
如果你开始 一个双=(imread( 'pix1.jpg')); 然后你的MSE几乎为零(我希望它大约为256 * 256 * 3 * eps(即舍入误差))。