У меня есть камера (iPhone), у меня есть 3D-объект управления на изображении, который я очень хорошо знаю его свойства. (Мой контрольный объект). Существует также вторичный объект в движении. Конечная цель состоит в том, чтобы установить трехмерную траекторию движущегося объекта за заданный период времени. (Tracking)
Я хотел бы спросить, могу ли я узнать?
Расстояние телефона до объекта управления (для обсуждения давайте предположим, что камера находится на определенной высоте, а определенное расстояние ни одно из них не известно, но камера перпендикулярна известной поверхности)
Вторичный объект, где я могу найти объект в каждом последующем кадре. Моя цель - оценить его трехмерную траекторию, как я указал выше.
Дополнительный вопрос: мы можем сделать систему такой, чтобы расстояние телефона до объекта управления можно было установить (хотя и не было бы предпочтительным), поможет ли это мне со вторым пунктом?
Ответы:
Если у вашего объекта есть 6 известных точек (известные трехмерные координаты, и Z ), вы можете вычислить местоположение камеры, относящееся к системе координат объектов.X,Y Z
Сначала немного основ.
Однородная координата вектор представление евклидова координат , в которых мы прилагаемый так называемом масштабном фактор со | такое , что однородная координатой 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,Y Z
Матрица камеры представляет собой матрицу проекции из трехмерного мира на датчик изображения:3×4
Где - это точка на датчике изображения (с пиксельными единицами), а X - проецируемая 3D-точка (скажем, в качестве единицы измерения используются миллиметры).x X
Мы помним, что кросс-произведение между двумя 3-векторами можно определить как умножение матрицы на вектор, так что:
Также полезно отметить, что перекрестное производство .v×v=0
Теперь попробуем решить матрицу проекции из предыдущих уравнений. Умножим уравнение проекции с левой стороны на матрицу кросс-произведения x s:P x
Ага! Результат должен быть нулевым вектором. Если мы теперь откроем уравнение, мы получим:
Небольшая пауза, чтобы мы могли собраться. Обратите внимание, что предыдущее матричное уравнение должно быть сформировано для каждого известного 3D-> 2D-соответствия (их должно быть не менее 6).
К счастью, мы можем использовать разложение по сингулярным числам (SVD), чтобы заставить
(Хартли, Циссерман - Геометрия с несколькими взглядами в компьютерном зрении)
И так далее.
источник