Frage

Ich habe 3 Punkte in einem 3D-Raum, von denen ich die genauen Standorte kennen. Angenommen, sie sind:. (x0,y0,z0), (x1,y1,z1) und (x2,y2,z2)

Auch habe ich eine Kamera, die an diesen drei Punkten sucht und ich kenne die 2D-Positionen der drei Punkte auf Kamera Ansichtsebene. So zum Beispiel (x0,y0,z0) wird (x0',y0') werden und (x1,y1,z1) wird (x1',y1') und (x2,y2,z2) wird von der Kamera Sicht (x2',y2') werden.

Was ist der einfachste Weg, um die Projektionsmatrix zu finden, die diese 3D-Punkte in 2D-Punkte auf Kamera Ansichtsebene projiziert werden. Wir wissen nichts über den Standort der Kamera.

War es hilfreich?

Lösung

Das gibt Ihnen zwei Sätze, die jeweils von drei Gleichungen in drei Variablen:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

Verwenden Sie einfach, was Methode der simultanen Gleichungen gelöst werden am einfachsten in Ihrer Situation ist (es ist nicht einmal schwer diese „von Hand“ zu lösen). Dann ist Ihre Transformationsmatrix ist nur ((a, b, c) (d, e, f)).

...

Eigentlich, das ist zu stark vereinfacht und nimmt eine Kamera am Ursprung des 3D-Koordinatensystem und keine Perspektive hingewiesen.

Für Perspektive, die Transformationsmatrix arbeitet eher wie:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

aber die 4x3-Matrix ist mehr eingeschränkt als 12 Freiheitsgrade, da wir haben sollten

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

So sollten Sie wahrscheinlich vier Punkte bis 8 Gleichungen erhalten Sie die 6 Variablen für die Kameraposition zu decken und Winkel und 1 mehr für die Skalierung der 2D-Ansicht Punkte, da wir in der Lage sein werden, die „Mitte“ Koordinaten zu beseitigen ( xc, yc).

Wenn Sie also 4 Punkte und Ihre 2-D-Ansicht Punkte transformieren, um die Mitte des Displays relativ zu sein, dann kann man 14 simultane Gleichungen in 13 Variablen erhalten und lösen.

Leider sechs der Gleichungen sind nicht lineare Gleichungen. Glücklicherweise alle Variablen in den Gleichungen auf die Werte beschränkt sind zwischen -1 und 1, so ist es wahrscheinlich immer noch möglich, die Gleichungen zu lösen.

Andere Tipps

Die Kamera besitzt (mindestens) 7 Freiheitsgrade - 3 für die Position, 3 für die Orientierung und 1 für FOV. Ich bin sicher, dass jemand mich korrigieren, wenn ich falsch liege, aber es scheint nicht, wie 3 Punkte genug für eine vollständige Lösung.

Für eine verallgemeinerte Lösung für dieses Problem, sieht 'Ansicht Correlation' in Graphics Gems II.

Was Sie suchen eine Pose Estimation-Algorithmus genannt wird. Werfen Sie einen Blick auf die POSIT Implementierung in OpenCV: http://opencv.willowgarage.com /documentation/c/calib3d_camera_calibration_and_3d_reconstruction.html#posit

Sie müssen vier oder mehr Punkte, und sie können in der gleichen Ebene liegen nicht.

Ein Tutorial für diese Implementierung ist hier: http://opencv.willowgarage.com/wiki/Posit

Sie kümmern sich aber: im Tutorial ein Quadrat Ansichtsfenster verwendet wird, so dass alle View-Koordinaten sind in der -1, -1 bis 1,1 Bereich. Dies führt uns zu der Annahme, dass diese in dem Kamerakoordinatensystem sein sollte (vor der Aspektverhältnis-Korrektur). Dies ist nicht der Fall, also wenn Sie ein Ansichtsfenster mit beispielsweise verwenden a. 4: 3-Seitenverhältnis Ihrer Eingabekoordinaten sollten dann in den -1,3333 sein, -1 bis 1.3333,1 Bereich

By the way, wenn Sie Ihre Punkte muss liegt in der gleichen Ebene, dann können Sie in dem camera_calibration Algorithmus von OpenCV sehen auch, aber das ist mehr beteiligt einzurichten und mehr Punkte als Eingabe erfordert . Allerdings wird es auch Ihnen die Verzerrung Informationen und intrinsische Parameter der Kamera erhalten.

Ich glaube nicht, gibt es genügend Informationen, eine endgültige Lösung zu finden. Ohne Ihre Kamera Position zu kennen und ohne Sichtebene zu wissen, gibt es eine unendliche Anzahl von Matrizen, die das Problem lösen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top