Учитывая два последовательных 3D-облака 1 и 2 (не все облако, скажем, 100 точек, выбранных из облака с OpenCV GoodFeaturesToMatch), полученные из карты глубины Kinect, я хочу вычислить гомографию камеры с 1 до 2. Я понимаю, что это проективное преобразование, и это уже было сделано многими людьми: здесь (слайд 12), здесь (слайд 30) и здесь, в том, что кажется классической бумагой. Моя проблема в том, что, хотя я компетентный программист, у меня нет навыков математики или триггеров, чтобы превратить один из этих методов в код. Поскольку это непростая задача, я предлагаю большую щедрость для кода, который решает следующую проблему:
Камера находится в начале координат, глядя в направлении Z, на нерегулярном пентаэдре [A, B, C, D, E, F]:
Камера перемещается -90 мм влево (X), + 60 мм вверх (Y), + 50 мм вперед (Z) и поворачивается на 5 ° вниз, 10 ° вправо и -3 ° против часовой стрелки:
Вращая всю сцену, чтобы камера вернулась в исходное положение, я могу определить расположение вершин в точке 2:
Файлы 3DS Max, используемые для его подготовки, max 1, max 2 и max 3
Вот позиции вершин до и после, внутренности и т.д.:
Обратите внимание, что вершины камеры2 не на 100% точны, есть немного преднамеренного шума.
Код, который мне нужен, который должен быть легко переводим в VB.Net или С#, используя EMGUCV и OpenCV, где это необходимо, берет 2 набора вершин и внутренностей и производит этот вывод:
Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3
Я не знаю, является ли гомография 3X3 или 3X4 для однородных координат, но она должна позволять мне переводить вершины от 1 до 2.
Я также не знаю значений a1, a2 и т.д.; что вы должны найти > ; -)
Предложение 500 бонусов "заменяет" щедрость, которую я предложил этому очень похожим вопросу, я добавил комментарий, указывающий на этот вопрос.
EDIT2: Мне интересно, может ли вопрос, который я задаю этот вопрос, вводить в заблуждение. Мне кажется, что проблема связана с точным облаком, чем с геометрией камеры (если вы знаете, как переводить и вращать А-В, вы знаете преобразование камеры и наоборот). Если это так, то, возможно, решение может быть получено с помощью алгоритма Кабша или что-то подобное