Учитывая два последовательных облака 3D-точек 1 и 2 (не все облако, скажем, 100 баллов, выбранных из облака с GoodFeaturestRestomatch), полученным из глубины Kinect, я хочу вычислить гомографию камеры от 1 До 2. Я понимаю, что это проектное преобразование, и оно уже было сделано многими людьми: здесь (слайд 12) , здесь (слайд 30) и здесь Что кажется классической статьей . Моя проблема заключается в том, что в то время как я компетентный программист, у меня нет навыков математики или трига, чтобы превратить один из этих методов в код. Поскольку это не простая проблема, я предлагаю большую щедрость для кода, который решает следующую проблему:
камера находится в начале происхождения, глядя в направлении Z, на нерегулярном пентаэдре [A, B, C, D, D, D, E, F]:
Камера перемещает -90 мм влево (x), + 60 мм вверх (y), + 50 мм вперед (z) и вращается на 5 ° вниз, 10 ° справа и -3 ° против часовой часовой стрелки:
Вращавшая всю сцену так, чтобы камера вернулась в исходное положение, позвольте мне определить локации вершин в 2:
Файлы MAX 3DS, используемые для приготовления этого MAX 1 , MAX 2 и MAX 3
Вот положения вершин до и после, внутри , так далее.:
Обратите внимание, что вершины Camera2 не являются точными 100%, есть немного преднамеренного шума.
код, который мне нужен, который должен быть легко переведен в VB.NET или C #, с помощью 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 Bounty предлагает «заменяет» щедрость, которую я предложил это очень похожий вопрос , я добавил комментарий там, указывающий на этот вопрос.
Редактировать2: Мне интересно, если я задаю этот вопрос, вводит в заблуждение. Мне кажется, что проблема - это больше устойчивости точечного облака, чем у геометрии камеры (если вы знаете, как перевести и повернуть до B, вы знаете трансформацию камеры и вице-версию). Если это так, то, возможно, решение может быть получено с алгоритмом Kabsch или что-то подобное