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
ありがとうございました。これは非常に役に立ちます。 – tlturton