Reprojection von Pixeln von einem Bild in ein anderes

9

Ich habe eine Reihe von kalibrierten Kameras, die Bilder von einer ebenen Szene aufnehmen. Der Einfachheit halber nehmen wir an, dass es 3 Kameras gibt. Diese Kameras durchlaufen eine allgemeine Bewegung, aber hauptsächlich eine Translation und eine leichte Drehung. Beispielpositionen von Kameras

Die Aufgabe besteht darin, sie zusammen zu sticken. Ich habe keine Kenntnisse über 3D-Koordinaten, nur eine Reihe von Bildern mit kalibrierten Kameras.

Was ich mache:

Ich erkenne Features mit SURF / SIFT-Implementierungen in OpenCV, um erste Homographien zu erhalten, indem ich findHomography zwischen jedem Bildpaar verwende (1- & gt; 2, 2- & gt; 3, 1- & gt; 3) ). Aus diesen Homographien erhalte ich eine erste Einschätzung der Posen jeder Kamera (ähnliche Vorgehensweise)

Dann versuche ich, die Bündelanpassungstechnik zu verwenden, um den Reprojektionsfehler für jedes passende Paar zu minimieren. Optimierte Parameter sind drei Translationswerte und drei Rotationswerte (erhalten aus der Rotationsformel von Rodrigues), obwohl ich später intrinsische Parameter hinzufügen kann (Fokale, Hauptpunkte usw.).

Unter der Annahme, dass Bild # 2 ein Referenzbild ist (indem es die meisten Übereinstimmungen mit anderen zwei Bildern aufweist), sind seine Rotations- und Translationsmatrizen Identitäts- bzw. Nullmatrizen.

Ich berechne die Reprojektion des Schlüsselpunkts (sichtbar in Bild # 2 und Bild # 1) von Bild # 2 bis Bild # 1 als (Pseudocode)

%Vor%

oder

%Vor%

wobei r__ Elemente der R1-Matrix sind und beide intrinsische Matrizen die Form

haben %Vor%

Ich nehme die Z2-Koordinate des Referenzrahmens als 1 an.

Die nächste Stufe besteht darin, die Bilder # 1 und # 3 unter Verwendung der erhaltenen Kameramatrizen (K1, R1, T1, K3, R3, T3) in das gemeinsame Koordinatensystem von Bild # 2 zu übertragen.

Das Problem ist, dass ich keine Kenntnisse über Z1 und Z3 habe, die für die korrekte Reprojektion in den Referenzrahmen von Bild # 2 benötigt werden, da die invertierte Reprojektion von Bild # 1- & gt; # 2 so aussieht:

%Vor%

wobei R__ Elemente der inv (R1) -Matrix sind.

Gibt es eine bessere Möglichkeit, den Reprojektionsfehler für die Bündelanpassung (2d - & gt; 2d) zu berechnen und dann Bilder in ein gemeinsames Koordinatensystem zu übertragen? Ich habe bemerkt, dass OpenCV sehr ähnliche Strukturen in seinem Stepping-Modul hat, aber es arbeitet unter der Annahme einer reinen Rotationsbewegung, was hier nicht der Fall ist.

    
user2080818 05.03.2013, 09:27
quelle

2 Antworten

1

Ich habe diese Frage in meinem Post automatisch beantwortet So erhalten Sie Punkte im Stereobild von extrinsischen Parametern

Beachten Sie, dass die Methode, die ich verwende (getestet und funktioniert!), nur gültig ist, wenn das Objekt in 3D-Koordinaten (reale Welt!) eben ist und sich bei Z = 0 befindet (der Punkt, an dem Sie die extrinsischen Parameter der Kameras). In diesem Fall ist diese Methode so genau wie Ihre Kalibrierung. Hinweis: Für die beste Kalibrierungsprüfung bei openCVs Kreiskalibrierungen hat es einen Wiederholungsfehler von 0,018 Pixel (getestet von einem Doktoranden, der an meiner Universität arbeitet).

    
Ander Biguri 09.04.2013 14:10
quelle
0

Sie haben wahrscheinlich einen Fehler beim Repojection-Fehler entdeckt. Es hat mit dieser Zeile zu tun:

%Vor%

Der Punkt [x2; y2; 1] ist bis zu einer Maßstabskonstante nicht eindeutig, C * [x2; y2; 1] und hier setzen Sie C = 1, wenn es allgemein unbekannt ist. Der Ort der Möglichkeiten manifestiert sich als eine Epipolarlinie in der ersten Ansicht. Sie können die Kleinste-Quadrate-Triangulation verwenden, um den wahrscheinlichsten Punkt entlang dieser Linie zu finden, an dem der 3D-Punkt existiert, und dann den neu projizierten Punkt berechnen als:

%Vor%

und gehe von dort wie oben weiter. Die 3D-Koordinaten jedes solchen Punktes X in Ihrer Punktwolke können unter Verwendung ihrer entsprechenden normalisierten Koordinaten (x1, y1), (x2, y2), ... sowie der entsprechenden Rotationsmatrizen und Translationsvektoren durch Formatieren derselben berechnet werden in das Matrixproblem:

%Vor%

und dann die kleinsten Quadrate zu lösen:

%Vor%

was auf den Seiten 3 und 4 illustriert wird hier .

    
willem 17.07.2013 00:21
quelle