Ich habe erfolgreich den 1D- Phasenkorrelationsalgorithmus getestet , um die vertikale Verschiebung zwischen zwei synthetischen Bildern zu bestimmen.
Wenn ich zu realen Bildern gewechselt bin, kann es jedoch überhaupt keine Übersetzung erkennen (der Peak liegt bei 0, was ein falsches Ergebnis ist).
Ich habe folgende Bilder:
Und daraus resultierende Phasenkorrelation (Magnitude, Real, Imaginary):
Die erste Scanlinie des Bildes ist vollständig weiß, aber die Verschiebung ist offensichtlich größer (20 Pixel).
Das erwartete Ergebnis ist eine weiße Linie in der 20. Reihe, die nur bei synthetischen Bildern oder leichtem Rauschen auftritt.
Mein Algorithmus ist sehr einfach - für jede Bildspalte:
- Berechnen Sie 1D FT der Quell- und Zielbildspalten (
a=FT(A)
,b=FT(B)
) - Cross-Power-Spektrum berechnen (
cross_power = a *. conj(b) / |a *. conj(b)|
) -*.
bezeichnet die punktweise Vervielfältigung,conj(x)
bezeichnet das komplexe Konjugat - Phasenkorrelation berechnen (
phase = IFT(cross_power)
) - Finden Sie die maximale Größe in jeder Spalte von
phase
. - Finden Sie die Konsens-Peak-Position (z. B. Median der erkannten Peak-Positionen).
Können Sie mir bitte raten, wie ich den Basiskonzentrationskorrelationsalgorithmus verbessern kann, um mit realen (verrauschten) Bildern umzugehen?
Sollte ich lieber NCC (Normalized Cross Correlation) anstelle von FFT-basierter Phasenkorrelation verwenden?
AKTUALISIEREN
Ich habe mit Null-Auffüllung experimentiert, um Fehler auszuschließen, die durch Kreisverschiebung verursacht wurden (nur eine einfache lineare Verschiebung von Bildern ist wünschenswert), und dies an Originalbildern von Wikipedia getestet:
Der einzelne Peak ist eindeutig da, wie er sein sollte:
Wenn ich jedoch eine leichte Glättung (Gaußsche Unschärfe) durchführe, um das Rauschen zu reduzieren und das Ergebnis tatsächlich zu verbessern , wird die Phasenkorrelation völlig entstellt:
Hier ist die erweiterte Version - der ursprüngliche Peak ist schwächer (warum ??) und es erschienen neue Peaks um Nullverschiebungen (warum ??):
Antworten:
Eindimensionale Version
Die eindimensionale Version, die Sie auflisten, funktioniert nicht. Wenn die Bildverschiebung groß genug ist (mehr als ein oder zwei Pixel in realen Bildern), gibt es keine Beziehung zu den Spaltenpixeln.
Versuchen Sie als Beispiel Folgendes:
Damit wir I5 haben:
und I6:
Dann ist die eindimensionale Phasenkorrelation nur:
wohingegen die zweidimensionale Phasenkorrelation ist:
Es ist etwas schwer zu erkennen, aber in der unteren rechten Ecke des Bildes befindet sich ein sehr hoher Peak. In der eindimensionalen Version ist kein klarer Peak vorhanden.
Warum hilft Glätten nicht? # 1
Die Korrelation versucht, "ähnliche" Variationen in jedem Bild zu finden. Wenn die zugrunde liegenden Signale ausreichend zufällig sind, funktioniert dies gut: Die Korrelation des weißen Rauschens mit sich selbst ergibt einen wirklich schönen Peak am Ursprung und an anderer Stelle nahe Null.
Wenn Sie ein "zufälliges" Bild mit einem Gaußschen Bild glätten , wird die erwartete Korrelation geglättet - die Energie wird in allen Spitzen über einen größeren Bereich verteilt.
Das Glätten hat den gegenteiligen Effekt, dass das Bild "vorgebleicht" wird. Das Voraufhellen (wie der Name schon sagt) versucht, das Bild mehr wie weißes Rauschen zu machen - was die beste Form hat, wenn wir eine korrelationsbasierte Erkennung durchführen (da der Peak gut lokalisiert ist).
Was Sie besser machen, ist die Verwendung der Matlab-
diff
Operation für eine vereinfachte, aber überraschend effektive Methode zum Voraufhellen von Bildern.Siehe dieses Beispiel.
Warum hilft Glätten nicht? # 2
Warum verursacht die Glättung zusätzliche Spitzen?
Was ich vermute (obwohl ich nicht sicher bin) ist, dass Ihr Kernel möglicherweise Werte nahe Null im Frequenzbereich hat, was zu numerischen Problemen führt?
Wenn ich einen Kernel anwende:
zu meinen zufälligen Bildern bekomme ich dann:
für die zweidimensionale Korrelation, die den Peak stärker ausbreitet, aber nicht die Probleme aufweist, die Sie sehen.
quelle
Der einfachste Weg, eine gute Leistung aus der Phasenkorrelation durch Aufhellen des Signals zu erzielen, besteht darin, das Protokoll der Größe zu erstellen. Sie können auch das Rauschen aus der resultierenden Korrelationsfläche herausfiltern. Weitere Informationen finden Sie unter „Verbessern der Phasenkorrelation für die Bildregistrierung“, Proceedings of (ICVNZ2011) Image and Vision Computing New Zealand 2011, S. 488-493, http://www98.griffith.edu.au/dspace/bitstream/handle/ 10072/44512 / 74188_1.pdf? Sequence = 1
quelle