Forums Neueste Beiträge
 

Korrelation von Matrizen

30/11/2009 - 01:44 von Philipp Kraus | Report spam
Hallo,

ich habe im Moment 2 Bilder (Matrizen mit Elementen im Intervall [0,1],
die ich dann auf [0,255] skaliere).
Nun möchte ich eine Aussage haben, wie àhnlich die Bilder sind, da eins
gemessene Werte enthàlt und
das andere die gleiche Graphik synthetisch erzeugt wurde. Im optimalen
Fall sollten sich beide
Bilder nur durch Gauß-Rauschen unterscheiden.

Ich verwende Matlab und habe zunàchst den Beispielcode aus der Hilfe genommen:
l1 = abs(fftshift(fft2(a)));
l2 = abs(fftshift(fft2(b)));

norm_xcorr_II = normxcorr2(l1,l1); % cross-correlate with self
norm_xcorr_BWI = normxcorr2(l2,l1); % cross-correlate with BW
diff_xcorr = norm_xcorr_II - norm_xcorr_BWI;
m = max(max(diff_xcorr));

Gebe ich nun an die Funktion das gleiche Bild rein, erhalte ich eine 0
zurück, was
ja der Aussage entsprechen würde, dass die Bilder identisch sind. Ich habe das
ganze auch einmal ohne die FFT angeschaut. Letztendlich ergeben die Daten
immer eine "logarithmische" Kurve, die sich der 1 nàhert bzw bei der FFT 0.35.

Ich suche im Moment nach Ideen, wie ich eine sinnvolle Aussage über
die Ähnlichkeit der Daten bekommen kann. Die Matrizen sind keine
"mathematischen" Gebilde, so dass ich nicht über die charakteristische
Funktion arbeiten kann.
Linien- bzw Kantendedektion über Hough kann ich nicht machen,
da es sich um keine Kanten handelt, sondern um eine Funktion,
die gefittet wurde (Minimierung des SSE).

Ich hatte auch schon über einen Chi^2 - Test nachgedacht, aber
das kann ich nicht direkt verwenden, da ich keine Wahrscheinlichkeiten
habe bzw zwar im Moment mit [0,1] Werten arbeite, generell aber auch
Werte > 1 möglich sein sollen.

Ich bin etwas ratlos, was sich als Vergleichsverfahren anbieten würde,
eine quantitative Aussage würde völlig ausreichen

Würde mich über Ideen / Vorschlàge / Ansàtze freuen

Danke

Phil
 

Lesen sie die antworten

#1 Ralf Goertz
30/11/2009 - 10:03 | Warnen spam
Philipp Kraus wrote:

Hallo,

ich habe im Moment 2 Bilder (Matrizen mit Elementen im Intervall [0,1],
die ich dann auf [0,255] skaliere).
Nun möchte ich eine Aussage haben, wie àhnlich die Bilder sind, da eins
gemessene Werte enthàlt und
das andere die gleiche Graphik synthetisch erzeugt wurde. Im optimalen
Fall sollten sich beide
Bilder nur durch Gauß-Rauschen unterscheiden.

Ich verwende Matlab und habe zunàchst den Beispielcode aus der Hilfe
genommen: l1 = abs(fftshift(fft2(a)));
l2 = abs(fftshift(fft2(b)));

norm_xcorr_II = normxcorr2(l1,l1); % cross-correlate with self
norm_xcorr_BWI = normxcorr2(l2,l1); % cross-correlate with BW
diff_xcorr = norm_xcorr_II - norm_xcorr_BWI;
m = max(max(diff_xcorr));

Gebe ich nun an die Funktion das gleiche Bild rein, erhalte ich eine 0
zurück, was
ja der Aussage entsprechen würde, dass die Bilder identisch sind. Ich
habe das ganze auch einmal ohne die FFT angeschaut. Letztendlich
ergeben die Daten immer eine "logarithmische" Kurve, die sich der 1
nàhert bzw bei der FFT 0.35.



Ich hatte an folgende Idee gedacht. Wenn sich die Bilder nur durch
unkorreliertes weißes Rauschen unterscheiden, dann sind die
Differenzwerte für Pixel (i,j) unabhàngig von den Differenzwerten für
Pixel (m,n). Folglich solltest Du eine Normalverteilung bei diesen
Werten finden. Das würde ich also zuerst testen (Kolmogov-Smirnoff-Test
fàllt mir dazu ein, oder auch Ausreißertests, die untersuchen, ob die
Extremwerte zufàllig sind oder nicht). Leider sind diese Tests aber
nicht hinreichend, weil zum Beispiel zwei benachbarte Pixel (i,j) und
(i+1,j) alternierende Vorzeichen haben könnten. Das können die Tests
nicht entdecken, weil die Information über die Lage der Pixel nicht in
die Analyse eingeht. Wenn Du aber eine Fouriertransformation rechnest,
wirst Du für das Beispiel im Spektrum einen sehr hohen Wert für die
höchste Frequenz (in x-Richtung) finden. Dieses sollten Ausreißertests
entdecken können. Wie gesagt, ich bin in Signalverarbeitung nicht
bewandert, ich weiß daher nicht, ob sich diese Korrelationen bereits in
den Fourierkoeffizienten selber finden oder ob Du die Amplitudenquadrate
und/oder Phasen betrachten musst, oder auch, ob Autokorrelation reicht,
aber ich meine, das ist der Weg, um Strukturen zu entdecken, bzw. zu
zeigen, dass keine Strukturen vorhanden sind.

Ralf

Ähnliche fragen