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., Y.Z.
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: X ← X.( X., Y., Z.)ωX =ω [ X.Y.Z.1]]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.X ← X.ωx =ω [ X.Y.1]]ω , X., Y.Z.
Die Kameramatrix ist eine Projektionsmatrix von der 3D-Welt zum Bildsensor:3 × 4
x =P.X.
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=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥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:
⎡⎣⎢0w−y−w0xy−x0⎤⎦⎥⎡⎣⎢P1,1P2,1P3,1P1,2P2,2P3,2P1,3P2,3P3,3P1,4P2,4P3,4⎤⎦⎥X=⎡⎣⎢P3,4Wy−P2,1Xw−P2,2Yw−P2,4Ww+P3,1Xy−P2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1Xw−P3,4Wx+P1,2Yw−P3,1Xx+P1,3Zw−P3,2Yx−P3,3ZxP2,4Wx+P2,1Xx−P1,4Wy−P1,1Xy+P2,2Yx−P1,2Yy+P2,3Zx−P1,3Zy⎤⎦⎥=0
P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢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[R−RC]
CPP
(Hartley, Zisserman - Geometrie mit mehreren Ansichten in der Bildverarbeitung)
X
x1=P1Xx2=P2X
(x1)xP1X=0(x2)xP2X=0
Und so weiter.