查看单个帖子
旧 2019-12-14, 20:46   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 计算均方误差时的逻辑误差

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时进行测试时也观察到了相同b=0.27.*a ;然后c=3.703703704.*b ;
  2. 在MSE公式中,在删除双0.5346 0.6132 0.6275数据类型时,误差最小化到0.5346 0.6132 0.6275
谁能清楚地解释为什么会这样,有什么补救办法?



回答:

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

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

如果您以a = double(imread('pix1.jpg'))开始;那么您的MSE应该接近零(我希望它的大小为256 * 256 * 3 * eps(即舍入误差))。



更多&回答...
poster 当前离线   回复时引用此帖