Wie kann ich die Kameraposition berechnen, indem ich zwei Fotos vergleiche?

8

Ich versuche die Kameraposition für ein Bild zu berechnen. Ich habe 2 Bilder von einem Rubikswürfel. Das erste Bild wird als das Basisbild betrachtet, und das nächste Bild ist das Bild, nachdem sich die Kamera bewegt hat. Also für das erste Bild nehme ich an, dass die Kamera bei (0,0,0) ist. Auf diesem Bild identifiziere ich dann die 4 Ecken der Vorderseite des Rubiks-Würfels (4 Ecken, die durch die 4 blauen Kreise gekennzeichnet sind).

Dann identifiziere ich für das nächste Bild (nach der Kamerabewegung) die gleiche Fläche des Rubiks-Würfels wie hier gezeigt

Wenn also das erste Bild als Basisbild angenommen wird, weiß jemand, ob und wie ich berechnen kann, um wie viel sich die Kamera für Bild 2 bewegt hat, wie hier gezeigt:

    
heyred 14.04.2012, 22:28
quelle

1 Antwort

13

Ich würde vorschlagen, dass Sie OpenCV dafür verwenden. Ich denke auch, diese Frage wäre besser für StackOverflow geeignet.

Das Lehrbuch zu diesem Thema wäre "Multiple-View Geometry" von Hartley und Zisserman. Ссылка (Es gibt ein Beispielkapitel zur Grundmatrix auf dieser Website.)

Finden Sie zuerst die fundamentale Matrix und dann, indem Sie die intrinsischen Parameter der Kamera kennen, eine Lösung für die Position.

  • Grundmatrix: Ссылка

  • Intrinsische Parameter: Stuff wie die Brennweite und wo der Hauptpunkt auf der Bildebene ist. Wenn Sie F haben, dann ist E = K ^ t * F * K, wenn K die intrinsische Matrix und das gleiche für beide Bilder ist.

  • So finden Sie eine Lösung für die Kameraposition: Ссылка

Algorithmus

So würde ich es in OpenCV machen. Ich habe das schon einmal gemacht, also sollte es funktionieren.

%Vor%

Alternative Lösungen

Ich bin mir sicher, dass ein direkterer Ansatz auch funktionieren kann. Der Vorteil dieses Ansatzes ist, dass kein menschlicher Input benötigt wird (unbeaufsichtigt). Dies gilt nicht für den optionalen Schritt 10 (Bestimmen der Skalierung).

Eine andere Lösung würde das Wissen über die Geometrie des Rubrikwürfels ausnutzen. Zum Beispiel werden sechs (5.5) Punkte benötigt, um die Position der Kamera zu schätzen, wenn die 3D-Position des Punktes bekannt ist.

Leider ist mir keine Software bekannt, die das automatisch für Sie erledigt.

Also hier ist der alternative Algorithmus: Notieren Sie die Koordinaten der Ecken des Würfels als (X_i, Y_i, Z_i) und möglicherweise auch Punkte mit anderen erkennbaren Positionen.

Markieren Sie die entsprechenden Punkte u_i = (x_i, y_i). Erstellen Sie für jede Korrespondenz zwei Zeilen in einer Matrix A. (X_i, Y_i, Z_i, 1, 0, 0, 0, 0, -x_i X_i, -x_i Y_i, -x_i Z_i-x_i) (0, 0, 0, 0, X_i, Y_i, Z_i, 1, -y_i X_i, -y_i Y_i, -y_i Z_i-y_i)

Finde dann p, so dass Ap = 0 ist. p ist der richtige Kern von A oder die am wenigsten quadrierte Lösung für Ap = 0.

Entfalten Sie p, um eine 3x4-Matrix zu erstellen. P.

    
Unapiedra 14.04.2012 22:45
quelle

Tags und Links