2017-09-14 43 views
0

Matlabはimmseをどのように計算しますか?私は2つの画像の間にmseを見つけたい。 how to measure he similarity between two 2D complex fields in matlab?によると、参照画像Y1と比較画像YのimmseはMSE=mean((abs(Y(:))-abs(Y1(:))).^2)と同じです。同様に、私は、合計の二乗誤差を行* colsの数で割ったものとしてMSEを計算できます。私がデモ画像の1つを走らせるとき、これらの異なるアプローチは、immseと同じ答えを与えません。MATLABはimmseをどのように計算しますか?

以下のサンプルコードでは、2つのMSEアプローチがあります。画像はMatlab immseデモからのもので、immseはMSE = 340付近を示します。他の2つのコードはMSE = 2.5を与えます。

注:コードはサンプルコードです。同じスクリプトで同じ関数名を2回使用しませんでした。サイズ(画像)の使用について不平を言ってもかまいませんが、それは詳細です。私は、私に大きさの違いを注文している私の理解の基本的な欠陥についてもっと心配しています。どうもありがとうございます。

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

あなたは、単にMATLABコマンドウィンドウに

open <func> 

を行うことによって、多くのMATLAB関数への基礎となるコードを確認することができます。

この場合、immseが差の基準を点数でスケーリングしていることがわかります。

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

ありがとうございました。これは非常に役に立ちます。 – tlturton

関連する問題