Оценка 3D-положения с помощью 2D-камеры

9

У меня есть камера (iPhone), у меня есть 3D-объект управления на изображении, который я очень хорошо знаю его свойства. (Мой контрольный объект). Существует также вторичный объект в движении. Конечная цель состоит в том, чтобы установить трехмерную траекторию движущегося объекта за заданный период времени. (Tracking)

Я хотел бы спросить, могу ли я узнать?

  • Расстояние телефона до объекта управления (для обсуждения давайте предположим, что камера находится на определенной высоте, а определенное расстояние ни одно из них не известно, но камера перпендикулярна известной поверхности)

  • Вторичный объект, где я могу найти объект в каждом последующем кадре. Моя цель - оценить его трехмерную траекторию, как я указал выше.

Дополнительный вопрос: мы можем сделать систему такой, чтобы расстояние телефона до объекта управления можно было установить (хотя и не было бы предпочтительным), поможет ли это мне со вторым пунктом?

Ktuncer
источник
Вы знакомы с литературой в этой области? Если нет, я могу порекомендовать некоторые документы, но будьте осторожны: математика вовлечена.
Эмре
@emre было бы замечательно, если бы вы могли предоставить некоторые указатели. Математика не проблема, мы любим математику.
Ktuncer
@emre Я быстро взглянул на обзорную статью. Это больше для отслеживания, я могу легко отслеживать объект, это не проблема. Я могу точно указать, в каком пикселе находится объект. Вопрос в том, где находится объект в трехмерном пространстве. Это возможно? По сути, у меня есть другой объект в трехмерном пространстве, который я знаю свойства, которые я могу использовать в качестве системы отсчета, но это все.
Ktuncer
Извините, неправильная статья. Возможно, вы сможете адаптировать отслеживание траекторий на основе Vision 3D для неизвестных сред [PDF]? Они используют стереокамеру; это возможность для вас?
Эмре

Ответы:

15

Если у вашего объекта есть 6 известных точек (известные трехмерные координаты, и Z ), вы можете вычислить местоположение камеры, относящееся к системе координат объектов.X,YZ

Сначала немного основ.

Однородная координата вектор представление евклидова координат , в которых мы прилагаемый так называемом масштабном фактор со | такое , что однородная координатой X = & omega ; [ X Y Z 1 ] T . В ваших собственных расчетах старайтесь поддерживать ω = 1 как можно чаще (это означает, что вы «нормализуете» однородную координату, разделив ее на последний элемент: XX(X,Y,Z)ωX=ω[XYZ1]Tω=1 ). Мы также можем использовать однородное представление для 2D-точек так, чтобыx=ω[ X Y 1 ](помните, что этиω,X,YиZразличны для каждой точки, будь то 2D или 3D-точка). Гомогенное представление координат облегчает математику.XXωx=ω[XY1]ω,X,YZ

Матрица камеры представляет собой матрицу проекции из трехмерного мира на датчик изображения:3×4

x=PX

Где - это точка на датчике изображения (с пиксельными единицами), а X - проецируемая 3D-точка (скажем, в качестве единицы измерения используются миллиметры).xX

Мы помним, что кросс-произведение между двумя 3-векторами можно определить как умножение матрицы на вектор, так что:

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

Также полезно отметить, что перекрестное производство .v×v=0

Теперь попробуем решить матрицу проекции из предыдущих уравнений. Умножим уравнение проекции с левой стороны на матрицу кросс-произведения x s:Px

(x)xx=(x)xPX=0

Ага! Результат должен быть нулевым вектором. Если мы теперь откроем уравнение, мы получим:

[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

Небольшая пауза, чтобы мы могли собраться. Обратите внимание, что предыдущее матричное уравнение должно быть сформировано для каждого известного 3D-> 2D-соответствия (их должно быть не менее 6).

2×12A

A[P1P2P3]=0

[P1P2P3]=0

К счастью, мы можем использовать разложение по сингулярным числам (SVD), чтобы заставить

[P1P2P3]=1

AP[P1P2P3]TP

P

P=K[RRC]

CPP

(Хартли, Циссерман - Геометрия с несколькими взглядами в компьютерном зрении)

X

x1=P1Xx2=P2X

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

И так далее.

buq2
источник
Правильно ли сказать, что ваш способ расчета 3D-положения камеры эквивалентен OpenCV solvePnp? docs.opencv.org/2.4/modules/calib3d/doc/…… (найдите на странице решения solvePnP. Я не могу вставить URL с #)
gregoiregentil