Извлечение проективной гомографии из двух карт глубины Kinect

Учитывая два последовательных трехмерных облака точек 1 и 2 (а не целое облако, скажем, 100 точек, выбранных из облака с помощью OpenFV 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 файлы, используемые для подготовки этогомакс 1, макс 2 а такжемаксимум 3

Вот положение вершин до и после, внутренние и т. Д .:

Обратите внимание, что вершины camera2 не на 100% точны, есть немного преднамеренного шума.

вот цифры в файле Excel

Код, который мне нужен, который должен быть легко переведен в 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 наград «заменяет» наем, который я предложилэто очень похожий вопросЯ добавил туда комментарий, указывающий на этот вопрос.

РЕДАКТИРОВАТЬ 2: Мне интересно, если способ, которым я задаю этот вопрос, вводит в заблуждение. Мне кажется, что проблема скорее в подгонке облака точек, чем в геометрии камеры (если вы знаете, как перевести и повернуть A в B, вы знаете преобразование камеры и наоборот). Если так, то, возможно, решение можно было бы получить с помощью алгоритма Кабша или чего-то подобного

Ответы на вопрос(3)

Ваш ответ на вопрос