Matlab如何计算immse?我想在两个图像之间找到mse。根据{{3}},immse与参考图像Y1和比较图像Y的MSE=mean((abs(Y(:))-abs(Y1(:))).^2)
相同。同样,我可以将MSE计算为求和的平方误差除以行* cols的数量。当我在其中一个演示图像上运行时,这些不同的方法并没有给出与immse相同的答案。
以下示例代码中有两种MSE方法。该图像来自Matlab immse demo,而immse给出的MSE = 340。另外两个代码给出MSE = 2.5左右。
注意:代码是示例代码,我没有在同一个脚本中使用相同的函数名两次。我理解你是否想抱怨使用尺寸(图像),但这是一个细节。我更担心的是我的理解中的基本缺陷给了我数量级的差异。非常感谢。
n01 = imread('pout.tif');
n02 = imnoise(n01,'salt & pepper', 0.02);
mse = mymse(n02,n01);
mlmse = immse(n02,n01);
function this = mymse(icomp, ibase)
[X Y nchan] = size(ibase);
diff = (icomp - ibase);
this = sum(sum(diff.*diff))/(X*Y*nchan);
end
function this = mymse(icomp, ibase)
this = mean ((abs(ibase(:)) - abs(icomp(:))).^2);
end
答案 0 :(得分:0)
只需执行
,即可查看许多matlab函数的基础代码open <func>
在Matlab命令窗口中。
在这种情况下,你可以看到immse正在做差异的规范,按点数进行缩放。
function this = mymse(icomp, ibase)
this = sum((ibase(:) - icomp(:)).^2) / numel(ibase);
end