2017-01-09 26 views
0

У меня есть известный объект (квадрат) в 3D-пространстве, и я знаю точное положение его углов *. Я беру фотографию объекта, и я уже могу точно определить, какой пиксель на фотографии соответствует тому углу квадрата. (Я также знаю разрешение датчика камеры и фокусное расстояние объектива **).Как рассчитать положение/ориентацию камеры с изображения известного объекта?

Как рассчитать положение и ориентацию камеры? Я хочу реализовать решение в C#. Это звучит скорее как базовая матричная операция, используемая в 3D-игровых движках все время, просто выполняя противоположное направление. Надеюсь, это действительно так. :)

* Вся информация о положении и длине выражается в [метре] в локальной системе координат. Нет лат/lons.

** Фокусное расстояние не выражено в эквиваленте 35 мм, а по ширине и высоте окна просмотра, расположенного на расстоянии 1 метра от фокуса.

ответ

1

Термин для того, что вы пытаетесь сделать, это «Гомография».

Библиотека OpenCV предоставляет множество функций для достижения этой цели - вы можете прочитать о некоторых из математики здесь:

http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?highlight=findhomography

В частности, функция findHomography будет использовать список точечных соответствий между а образ образца и изображение камеры для расчета матрицы для положения камеры.