2017-09-14 141 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