Вычислить матрицу преобразования из набора координат (с OpenCV)

У меня есть небольшой куб с n (можно считать, что n = 4) выделенными точками на его поверхности. Эти точки пронумерованы (1-n) и образуют координатное пространство, где точка №1 является началом координат.

Теперь я использую камеру слежения, чтобы получить координаты этих точек относительно координатного пространства камеры. Это означает, что теперь у меня есть n векторов p_i, указывающих из начала координат камеры на поверхность куба.

С помощью этой информации я пытаюсь вычислить матрицу аффинного преобразования (поворот + перемещение), которая представляет собой преобразование между этими двумя координатными пространствами. Часть перевода довольно тривиальна, но я борюсь с вычислением матрицы вращения.

Есть ли какие-либо встроенные функции в OpenCV, которые могут помочь мне решить эту проблему?


person Niko    schedule 22.05.2012    source источник


Ответы (3)


Похоже, cvGetPerspectiveTransform — это то, что вы ищете; cvFindHomograpy тоже может быть полезно.

person Josh Bleecher Snyder    schedule 22.05.2012
comment
Кажется, они работают с 2D-информацией, но мои данные все 3D. - person Niko; 22.05.2012
comment
Ах, извините, я пропустил это. Я не думаю, что OpenCV предоставляет что-то из коробки для этого случая. Для расчета поворотов (если нет масштабирования и вы уже сделали необходимые переводы) должно хватить немного триггера... - person Josh Bleecher Snyder; 23.05.2012

solvePnP должен дать вам матрицу вращения и вектор перевода. Попробуйте с CV_EPNP или CV_ITERATIVE.

Изменить: Или, возможно, вы ищете RQ разложение.

person fireant    schedule 22.05.2012

Посмотрите учебник по стереокамере для OpenCV. OpenCV использует плоскую шахматную доску для всех вычислений и устанавливает для своего Z-размера значение 0, чтобы построить список трехмерных точек. У вас уже есть 3D-точки, поэтому измените код в руководстве, чтобы отразить ваш список 3D-точек. Затем вы можете вычислить преобразование.

person Ankur Kumar    schedule 23.05.2012