Скажем, у нас есть робот \ машина \ NPC \ iPhone с видом с камеры. Мы контролируем все его движения в трехмерном пространстве. Вот алгоритм, который мы выполняем: захват кадра; переместить \ повернуть камеру (сохранить положение и разницу поворота: X, Y, Z
; aX, aY aZ
); захватить новый кадр; делать StereoBM
. Теперь мы хотим выполнить opencv reprojectImageTo3D
на StereoBM
результат. Это требует Q — 4 \times 4
матрица перспективного преобразования.
Интересно, как с помощью перевода и поворота diff (6 значений с плавающей запятой) мы можем получить это 4 \times 4
матрица перспективного преобразования без какой-либо обработки изображения?
Как показано в документации для reprojectImageTo3D
Вы можете получить 4x4
перспективное преобразование Q
от stereoRectify
.
Однако, если вы хотите создать свою собственную матрицу, посмотрите Вот чтобы увидеть, как 3D-преобразования могут быть записаны в 4x4
матрица (хотя обратите внимание, что они используют обычную математическую форму, которая транспонирована от того, что типично для компьютерного зрения), и Вот для примера OpenCV с правильным транспонированием в C ++.
По сути, вам нужно написать три отдельные матрицы вращения и трансляционную матрицу и объединить их все (с помощью умножения), чтобы получить окончательный результат. 4x4
матрица преобразования.
Других решений пока нет …