2017-09-14 136 views
0

Matlab如何计算免疫?我想找到两张图像之间的mse。根据how to measure he similarity between two 2D complex fields in matlab?,对于参考图像Y1和比较图像Y,immse与MSE=mean((abs(Y(:))-abs(Y1(:))).^2)相同。同样,我可以将MSE计算为求和平方误差除以行数* cols。当我在其中一个演示图像上运行时,这些不同的方法不会给出与免疫相同的答案。MATLAB如何计算免疫?

下面是示例代码中的两个MSE方法。该图像来自Matlab免费演示,并且免疫给出了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

你可以简单地做

open <func> 

在Matlab命令窗口中勾选底层代码,很多MATLAB功能。

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

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

非常感谢。这非常有帮助。 – tlturton