Log-Polar DFT-basierte skalierungsinvariante Bildregistrierung


10

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:

Übersetzung allein funktioniert

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.

ich^(ρ,θ)=ich(r+ρcos(2πθN.θ),r- -ρSünde(2πθN.θ))
ichrN.θθ
ich^lÖG(ρ,θ)=ich^(Logb(ρ),θ)
b=(2r)- -N.ρ

Hier sind die Beispielbilder im logarithmischen Polarraum mit (falls etwas auffällig nicht stimmt):ρ=θ=256

Log Polar

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):

Log Polar von DFT

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.


1
Hast du herausgefunden, was los war?
Mr.WorshipMe

1
@ Mr.WorshipMe Leider nicht.
Drew Cummins

@Drew Cummins, ich denke, es lag an dem Testbild, das Sie verwendet haben, weil es einen scharfen Übergang vom Hintergrund gab. Wie wäre es mit anderen Testbildern? Aus der letzten Abbildung ergaben sich auch offensichtliche Unterschiede zwischen den beiden Größen. Daher ist es besser, vor der DFT eine ordnungsgemäße Vorverarbeitung der Fenster durchzuführen.
lxg

Ein paar Tage bevor ich dieses Papier gefunden habe, habe ich versucht, den Algorithmus ohne Erfolg zu implementieren. Ich habe mich gefragt, ob Sie Ihre Implementierung an einen Anfänger weitergeben könnten :)
Alexis España

Antworten:


1

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.


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.