Если у вашего объекта есть 6 известных точек (известные трехмерные координаты, и Z ), вы можете вычислить местоположение камеры, относящееся к системе координат объектов.X,YZ
Сначала немного основ.
Однородная координата вектор представление евклидова координат , в которых мы прилагаемый так называемом масштабном фактор со | такое , что однородная координатой X = & omega ; [ X Y Z 1 ] T . В ваших собственных расчетах старайтесь поддерживать ω = 1 как можно чаще (это означает, что вы «нормализуете» однородную координату, разделив ее на последний элемент: X ← X(X,Y,Z)ωX=ω[XYZ1]Tω=1 ). Мы также можем использовать однородное представление для 2D-точек так, чтобыx=ω[ X Y 1 ](помните, что этиω,X,YиZразличны для каждой точки, будь то 2D или 3D-точка). Гомогенное представление координат облегчает математику.X←Xωx=ω[XY1]ω,X,YZ
Матрица камеры представляет собой матрицу проекции из трехмерного мира на датчик изображения:3×4
x=PX
Где - это точка на датчике изображения (с пиксельными единицами), а X - проецируемая 3D-точка (скажем, в качестве единицы измерения используются миллиметры).xX
Мы помним, что кросс-произведение между двумя 3-векторами можно определить как умножение матрицы на вектор, так что:
v×u=(v)xu=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥u
Также полезно отметить, что перекрестное производство .v×v=0
Теперь попробуем решить матрицу проекции из предыдущих уравнений. Умножим уравнение проекции с левой стороны на матрицу кросс-произведения x s:Px
(x)xx=(x)xPX=0
Ага! Результат должен быть нулевым вектором. Если мы теперь откроем уравнение, мы получим:
⎡⎣⎢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
Небольшая пауза, чтобы мы могли собраться. Обратите внимание, что предыдущее матричное уравнение должно быть сформировано для каждого известного 3D-> 2D-соответствия (их должно быть не менее 6).
2×12A
A⎡⎣⎢P1P2P3⎤⎦⎥=0
⎡⎣⎢P1P2P3⎤⎦⎥=0
К счастью, мы можем использовать разложение по сингулярным числам (SVD), чтобы заставить
∥⎡⎣⎢P1P2P3⎤⎦⎥∥=1
AP[P1P2P3]TP
P
P=K[R−RC]
CPP
(Хартли, Циссерман - Геометрия с несколькими взглядами в компьютерном зрении)
X
x1=P1Xx2=P2X
(x1)xP1X=0(x2)xP2X=0
И так далее.