Ich versuche, die Bildregistrierung mithilfe der Phasenkorrelation durchzuführen, wie im Reddy Chatterji- Artikel beschrieben . In meinem Fall können die Bilder relativ zueinander skaliert und übersetzt werden.
Der Algorithmus zum Ermitteln der relativen Skala ist, wie ich es verstehe, (siehe: das Flussdiagramm aus dem Papier ):
F1 = DFT(I1)
F2 = DFT(I2)
H1 = Highpass(F1)
H2 = Highpass(F2)
L1 = LogPolar(Magnitude(H1))
L2 = LogPolar(Magnitude(H2))
PC = PhaseCorrelate(L1,L2)
PM = norm(PC)
R = IDFT(PhaseCorr/PM)
P = Peak(R)
Scale = LogBase^P[1]
Die Skalierung gibt mir scheinbar unsinnige Werte (von Bild zu Bild sehr unterschiedlich und niemals korrekt).
Wenn man jedoch die Skalierung ignoriert, funktioniert der gleiche Phasenkorrelationsansatz gut für die Übersetzung. und so vermute ich, dass ich ein Problem mit meiner logarithmischen Polartransformation habe. Hier ist ein Beispiel, in dem ich die Übersetzung gelöst habe - das linke Bild ist das Original und das rechte wurde zugeschnitten und übersetzt - die Lösung wird oben auf dem Original angezeigt:
Für die logarithmische Polartransformation transformiere ich zuerst in den Polarraum: wobei das Originalbild ist, ist Bildradius (halbe Breite) und ist die Anzahl der Abtastwerte in der Richtung. Ich probiere dann daraus, um mich in einen logarithmischen Polarraum zu verwandeln: wobei wie in 1 beschrieben, so dass es den gesamten Polarraum überspannt.
Hier sind die Beispielbilder im logarithmischen Polarraum mit (falls etwas auffällig nicht stimmt):
Zuletzt zeigt dies die tatsächliche Transformation, die die Bilder vor dem Phasenkorrelationsschritt durchlaufen (oben ist die DFT-Größe nach dem Hochpassfilter, unten ist die im logarithmischen Polarraum):
Ich verwende OpenCV mit LogPolar- und PhaseCorrelate-Methoden. Während das PhaseCorrelate, wie meine manuelle Implementierung, mir die richtige Antwort für die Übersetzung gibt, ist es im Maßstab falsch. Da die Verwendung des OpenCV LogPolar oder meines eigenen die Richtigkeit nicht beeinträchtigt, muss mir etwas fehlen.
Jede Hilfe wäre dankbar.
quelle
Antworten:
Wenn Sie etwas wirklich Robustes wollen, das aber möglicherweise rechenintensiver ist, sollten Sie sich den hier implementierten Algorithmus ansehen . Es implementiert das Papier "Robuste Bildregistrierung mit logarithmischer Polar-Transformation" ( pdf ). Es hat auch den Vorteil, dass es neben der Translations- und Skalierungsinvariante rotationsinvariant ist. In meiner Anwendung (Kunst) konnte es sogar ähnlich aussehende Bilder registrieren, nicht nur transformierte Versionen desselben Bildes.
quelle
Ich denke, das liegt an bestimmten Implementierungsproblemen. Zum Beispiel (1) ist es besser, die Vorverarbeitung des Fensters vor der DFT durchzuführen; (2) Sie können die Funktion Highpass () überprüfen und sich auf die in Reddy Chatterjis Artikel Gleichung (23) - (24) beziehen. Außerdem gibt es eine Begrenzung für den Skalierungswert, und Sie können andere Skalierungswerte ausprobieren.
quelle