3D-Positionsschätzung mit 2D-Kamera

9

Ich habe eine Kamera (iPhone), ich habe ein 3D-Steuerobjekt im Bild, dessen Eigenschaften ich sehr gut kenne. (Mein Kontrollobjekt). Es ist auch ein sekundäres Objekt in Bewegung. Das ultimative Ziel ist es, die 3D-Trajektorie des sich bewegenden Objekts für einen bestimmten Zeitraum zu bestimmen. (Verfolgung)

Ich frage gerne, könnte ich es herausfinden?

  • Die Entfernung des Telefons zum Steuerobjekt (Nehmen wir zur Diskussion an, dass sich die Kamera in einer bestimmten Höhe befindet und keine bestimmte Entfernung bekannt ist, aber die Kamera senkrecht zur bekannten Oberfläche steht.)

  • Das sekundäre Objekt, in dem ich das Objekt in jedem nachfolgenden Frame finden kann. Mein Ziel ist es, die 3D-Flugbahn wie oben angegeben abzuschätzen.

Bonusfrage: Wir können das System so gestalten, dass der Abstand des Telefons zum Steuerobjekt eingestellt werden kann (obwohl dies nicht bevorzugt wird). Würde mir dies beim zweiten Punkt helfen?

Ktuncer
quelle
Kennen Sie die Literatur in diesem Bereich? Wenn nicht, kann ich einige Artikel empfehlen, aber seien Sie gewarnt: Die Mathematik ist involviert.
Emre
@emre es wäre toll, wenn Sie einige Hinweise geben könnten. Die Mathematik ist kein Problem, wir lieben Mathematik.
Ktuncer
@emre Ich habe einen kurzen Blick auf das Review-Papier geworfen. Dies ist mehr für die Verfolgung, ich kann das Objekt leicht verfolgen, das ist nicht das Problem. Ich kann genau bestimmen, in welchem ​​Pixel sich das Objekt befindet. Das Problem ist, wo sich das Objekt im 3D-Raum befindet. Ist das möglich? Grundsätzlich habe ich ein anderes Objekt im 3D-Raum, bei dem ich die Eigenschaften kenne, die ich als Referenzrahmen verwenden kann, aber das ist es.
Ktuncer
Es tut mir leid, falsches Papier. Vielleicht können Sie die visionsbasierte 3D-Trajektorienverfolgung für unbekannte Umgebungen anpassen [PDF]? Sie benutzen eine Stereokamera; ist das eine möglichkeit für dich
Emre

Antworten:

15

Wenn Ihr Objekt 6 bekannte Punkte hat (bekannte 3D-Koordinaten, und Z ), können Sie die Position der Kamera in Bezug auf das Objektkoordinatensystem berechnen.X,YZ

Zuerst einige Grundlagen.

Die homogene Koordinate ist die Vektordarstellung der euklidischen Koordinate an die wir den sogenannten Skalierungsfaktor ω angehängt haben, so dass die homogene Koordinate X = ω [ X Y Z 1 ] T ist . Versuchen Sie in Ihren eigenen Berechnungen, ω = 1 so oft wie möglich beizubehalten (was bedeutet, dass Sie die homogene Koordinate "normalisieren", indem Sie sie durch ihr letztes Element teilen: XX.(X,Y,Z)ωX=ω[XYZ1]Tω=1 ). Wir können auch eine homogene Darstellung für 2D-Punkte verwenden, so dassx=ω[ X Y 1 ](denken Sie daran, dass dieseω,X,YundZfür jeden Punkt unterschiedlich sind, sei es 2D- oder 3D-Punkt). Eine homogene Koordinatendarstellung erleichtert die Mathematik.XXωx=ω[XY1]ω,X,YZ

Die Kameramatrix ist eine Projektionsmatrix von der 3D-Welt zum Bildsensor:3×4

x=PX

Dabei ist der Punkt auf dem Bildsensor (mit Pixeleinheiten) und X der projizierte 3D-Punkt (sagen wir, er hat Millimeter als Einheiten).xX

Wir erinnern uns, dass das Kreuzprodukt zwischen zwei 3-Vektoren als Matrix-Vektor-Multiplikation definiert werden kann, so dass:

v×u=(v)xu=[0v3v2v30v1v2v10]u

Es ist auch nützlich zu beachten, dass die Kreuzproduktion .v×v=0

Versuchen wir nun, die Projektionsmatrix aus den vorherigen Gleichungen zu lösen . Multiplizieren wir die Projektionsgleichung von links mit der Kreuzproduktmatrix von x :Px

(x)xx=(x)xPX=0

Aha! Das Ergebnis muss ein Vektor von Null sein. Wenn wir jetzt die Gleichung öffnen, erhalten wir:

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4WyP1,1Xy+P2,2YxP1,2Yy+P2,3ZxP1,3Zy]=0

P

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][P1P2P3]=0

PnnP

Kleine Pause, damit wir unsere Stärken sammeln können. Beachten Sie, dass die vorherige Matrixgleichung für jede bekannte 3D-> 2D-Entsprechung gebildet werden muss (es müssen mindestens 6 davon vorhanden sein).

2×12A

A[P1P2P3]=0

[P1P2P3]=0

Glücklicherweise können wir die Singular Value Decomposition (SVD) verwenden, um zu erzwingen

[P1P2P3]=1

AP[P1P2P3]TP

P

P=K[RRC]

CPP

(Hartley, Zisserman - Geometrie mit mehreren Ansichten in der Bildverarbeitung)

X

x1=P1Xx2=P2X

(x1)xP1X=0(x2)xP2X=0

Und so weiter.

buq2
quelle
Ist es richtig zu sagen, dass Ihre Methode zur Berechnung der 3D-Position der Kamera OpenCV SolvePnp entspricht? docs.opencv.org/2.4/modules/calib3d/doc/… (Suche nach lösenPnP auf der Seite. Ich kann keine URL mit einem #
einfügen