Schritt für Schritt Schätzung der Kameraposition für visuelle Verfolgung und planare Markierungen

21

Ich beschäftige mich schon seit einiger Zeit mit der Schätzung der Kameraposition für Augmented Reality- und Visual Tracking-Anwendungen und denke, dass es trotz vieler detaillierter Informationen zu dieser Aufgabe immer noch viele Verwirrungen und Missverständnisse gibt.

Ich denke, die nächsten Fragen verdienen eine detaillierte schrittweise Antwort.

  • Was sind Kameraeigenschaften?
  • Was sind Kameraextrinsiken?
  • Wie berechne ich Homographie von einem planaren Marker?
  • Wenn ich Homografie habe, wie kann ich die Kamerapose bekommen?
Jav_Rock
quelle
Die Renormalisierung, die Sie vornehmen, ist mir unklar: 1. H ist die Homographie, die mit einem Verfahren (z. B. SVD) aus den Daten ermittelt wurde. 2. inv (K) * H = A ist das, womit Sie hier arbeiten. Dann machen Sie q1 = a1 / norm (a1) und q2 = a2 / norm (a2) als orthonormale Spalten einer Rotationsmatrix und machen q3 = q1xq2 ... Dann nehmen Sie t / (etwas), um den Translationsvektor zu erhalten. Wie ist es, dass Sie q1 und q2 durch möglicherweise unterschiedliche Dinge teilen können, und wie wählen Sie aus, durch was Sie t teilen möchten? Oder ist die Idee , dass der SVD Verfahren und Multiplikation mit inv (K) gibt etwas schließen , aber nicht ganz orthogonal / orthonormal Rotationsmatrix, so th
user2600616
Aber wie kann ich einen 3D-Punkt erhalten (X, Y, 1)?
Waschbär

Antworten:

19

Es ist wichtig zu verstehen, dass das einzige Problem hier darin besteht, die extrinsischen Parameter zu erhalten. Die Kameraeigenschaften können offline gemessen werden, und es gibt viele Anwendungen für diesen Zweck.

Was sind Kameraeigenschaften?

Kameraeigene Parameter werden üblicherweise als Kamerakalibrierungsmatrix . Wir können schreibenK

K=[αusu00αvv0001]

woher

  • & agr; v u v f α u = k u f α v = k v f k u k v u vαu und sind der Skalierungsfaktor in und Koordinatenrichtung und proportional zur Brennweite der Kamera: und . und sind die Anzahl der Pixel pro Abstandseinheit in und Richtung.αvuvfαu=kufαv=kvfkukvuv

  • c=[u0,v0]T heißt der Hauptpunkt, üblicherweise die Koordinaten der Bildmitte.

  • u vs ist der Versatz, nur ungleich Null, wenn und nicht senkrecht sind.uv

Eine Kamera wird kalibriert, wenn ihre Eigenschaften bekannt sind. Dies ist einfach zu bewerkstelligen, sodass es in der Bildverarbeitung nicht als Ziel, sondern als Offline-Trivialschritt betrachtet wird.

Was sind Kameraextrinsiken?

Kameraextrinsik oder externe Parameter ist eine Matrix, die der euklidischen Transformation von einem Weltkoordinatensystem in das Kamerakoordinatensystem entspricht. repräsentiert eine Rotationsmatrix und eine Translation.3 × 4 R 3 × 3 t[R|t]3×4R3×3t

Computer-Vision-Anwendungen konzentrieren sich auf die Schätzung dieser Matrix.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

Wie berechne ich Homographie von einem planaren Marker?

Homographie ist eine homogene Matrix, die eine 3D-Ebene und ihre Bildprojektion in Beziehung setzt. Wenn wir ein Flugzeug haben die Homographie , die einen Punkt abbildet on zu dieser Ebene und den entsprechenden 2D - Punkt unter dem Projektions ist3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

Um Homographie berechnen zu können, benötigen wir Punktpaare Welt-Kamera. Wenn wir eine planare Markierung haben, können wir ein Bild davon verarbeiten, um Merkmale zu extrahieren und diese Merkmale in der Szene zu erkennen, um Übereinstimmungen zu erhalten.

Wir brauchen nur 4 Paare, um die Homographie mit Direct Linear Transform zu berechnen.

Wenn ich Homografie habe, wie kann ich die Kamerapose bekommen?

Die Homographie und die Kamerapose enthalten die gleichen Informationen, und es ist leicht, von einer zur anderen zu gelangen. Die letzte Spalte von beiden ist der Translationsvektor. Spalte eins und zwei der Homographie sind auch Spalte eins und zwei der Kamerapositionsmatrix. Es ist nur die dritte Spalte von übrig , und da es orthogonal sein muss, kann es als Kreuzprodukt der ersten und zweiten Spalte berechnet werden:HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

Aufgrund der Redundanz ist es erforderlich, die -Division durch beispielsweise Element [3,4] der Matrix zu normalisieren .[R|t]

Jav_Rock
quelle
4
Ich halte es für irreführend zu sagen, dass die Kalibrierung "einfach und nicht das Ziel des Lebenslaufs" ist. Im Normalfall müssen wir auch die Verzerrungsparameter schätzen. Anstelle einer Selbstkalibrierung würde ich eine planare Kalibrierung (Zhang - Eine flexible neue Technik zur Kamerakalibrierung) empfehlen, da diese flexibler ist, wenn getrennte Kalibrierungsverfahren durchgeführt werden können. Sie haben auch einen kleinen Fehler in "Wenn ich Homografie habe, wie kann ich die Kamerapose bekommen?" da Sie die Kalibrierung nicht berücksichtigen (H_ {calib} = K ^ -1H).
buq2
3
Kamerapose von Homographie ist falsch. Es gibt verschiedene Möglichkeiten, dies zu tun. Einige von ihnen sind höchst nicht trivial.
mirror2image
Ich verstehe nicht, warum es falsch ist. Ich berechne es so und arbeite. Warum sagst du, dass es falsch ist?
Jav_Rock
3
Sie haben im letzten Abschnitt geschrieben, dass H ^ 1 und R ^ 1 und gleich sind, aber im dritten Abschnitt geben Sie an, dass H = K [RT], was bedeuten würde, dass R ^ 1 tatsächlich K ^ -1H ^ 1 ist. Dies ist jedoch nicht unbedingt der Fall, da es eine unendliche Anzahl von H gibt, die die Gleichungen erfüllt und Probleme beim Lösen von R ^ 1, R ^ 2 und T (der unbekannten Skala) verursacht. Ihre Antwort ignoriert eine robuste Eigen- und Verzerrungskalibrierung und einige der Gleichungen sind falsch, weshalb dies keine gute Antwort auf die Frage ist.
Buq2
Ja, in Schritt 3 fehlte mir die Kalibrierungsmatrix, da ich sie aus meinem Code genommen und mit K in einer anderen Funktion der Codes multipliziert habe.
Jav_Rock
3

Während der zweidimensionale Fall sehr gut erklärt wird, bietet die von Jav_Rock vorgeschlagene Antwort keine gültige Lösung für Kameraposen im dreidimensionalen Raum. Beachten Sie, dass für dieses Problem mehrere mögliche Lösungen existieren.

Dieses Papier enthält geschlossene Formeln zur Zerlegung der Homographie, die Formeln sind jedoch etwas komplex.

OpenCV 3 implementiert bereits genau diese Zerlegung ( decomposeHomographyMat ). Bei einer gegebenen Homographie und einer korrekt skalierten intrinsischen Matrix bietet die Funktion einen Satz von vier möglichen Rotationen und Verschiebungen.

Die intrinsische Matrix muss in diesem Fall in Pixeleinheiten angegeben werden, dh Ihr Hauptpunkt ist normalerweise (imageWidth / 2, imageHeight / 2)und Ihre Brennweite ist normalerweise focalLengthInMM / sensorWidthInMM * imageHeight.

Emiswelt
quelle
Was ist eine richtig skalierte intrinsische Matrix?
Guig
1
Ich habe meine Antwort aktualisiert. Bitte siehe oben.
Emiswelt
Hey @Emiswelt, ist die Brennweite nicht focalLengthInMM / sensorWidthInMM * imageWidth? Warum wählen Sie stattdessen die Höhe?
El Marce