MATLAB如何计算immse?

时间:2017-09-14 20:30:37

标签: matlab

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

1 个答案:

答案 0 :(得分:0)

只需执行

,即可查看许多matlab函数的基础代码
open <func>

在Matlab命令窗口中。

在这种情况下,你可以看到immse正在做差异的规范,按点数进行缩放。

function this = mymse(icomp, ibase)
    this = sum((ibase(:) - icomp(:)).^2) / numel(ibase);
end