2017-09-14 3 views
0

Wie berechnet Matlab Immse? Ich möchte die mse zwischen zwei Bildern finden. Gemäß how to measure he similarity between two 2D complex fields in matlab? ist immedse gleich MSE=mean((abs(Y(:))-abs(Y1(:))).^2) für Referenzbild Y1 und Vergleichsbild Y. Ebenso könnte ich MSE als summierte Quadratfehler dividiert durch die Anzahl der Zeilen * Spalten berechnen. Wenn ich auf einem der Demo-Bilder laufe, geben diese verschiedenen Ansätze nicht die gleiche Antwort wie immedse.Wie berechnet MATLAB IMMSE?

Hier sind zwei MSE-Ansätze im folgenden Beispielcode. Das Bild stammt von der Matlab Immse Demo und Immse gibt um einen MSE = 340. Die anderen zwei Codes geben um einen MSE = 2.5.

Hinweis: Der Code ist Beispielcode, ich habe den gleichen Funktionsnamen nicht zweimal im selben Skript verwendet. Und ich verstehe, wenn Sie sich über die Größe (Bild) beschweren wollen, aber das ist ein Detail. Ich mache mir mehr Sorgen um den grundlegenden Fehler meines Verständnisses, der mir Unterschiede in Größenordnungen gibt. Ich danke dir sehr.

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 

Antwort

0

können Sie überprüfen den zugrunde liegenden Code zu viele Matlab-Funktionen durch einfaches

tun
open <func> 

im Matlab-Befehlsfenster.

In diesem Fall können Sie sehen, dass IMMSE die Norm der Unterschiede macht, skaliert nach der Anzahl der Punkte.

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

Vielen Dank. Das ist sehr hilfreich. – tlturton

Verwandte Themen