poster
2019-12-14, 20:46
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类型。但是,有两个问题:
现在从逻辑上讲,对于RGB波段,MSE应该为零,因为将结果c乘以4.0应该会逆转运算。但是,MSE得出的值为1.1361 1.2780 1.2902在b=0.27.*a时进行测试时也观察到了相同b=0.27.*a ;然后c=3.703703704.*b ;
在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(即舍入误差))。
更多&回答... (https://stackoverflow.com/questions/5375280)
现在从逻辑上讲,对于RGB波段,MSE应该为零,因为将结果c乘以4.0应该会逆转运算。但是,MSE得出的值为1.1361 1.2780 1.2902在b=0.27.*a时进行测试时也观察到了相同b=0.27.*a ;然后c=3.703703704.*b ;
在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(即舍入误差))。
更多&回答... (https://stackoverflow.com/questions/5375280)