Конвертировать OpenCV стереоизображение с камеры в камеру Three.js

Я откалибровал свои стереокамеры с помощью OpenCV StereCalibrate () и выпрямил их с помощью StereoRectify (). Это успешно (эпиполярные линии камер правильно выровнены и могут получить точные 3D-положения точек из соответствующих пар 2D-точек слева / справа).

Сейчас я пытаюсь использовать Three.js на основе WebGL для отображения тех же трехмерных точек в той же проекции, что и в OpenCV. Другими словами, если я наложил откалиброванное и выпрямленное 2D-изображение с левой камеры на выход Three.js, 3D-точки three.js должны визуально выровняться с положением 2D-изображения OpenCV. Это может быть использовано для дополненной реальности.

Просто имеем дело с левой камерой (камера 1):

StereoRectify () обеспечивает проекционную матрицу P1 и выпрямительное преобразование R1. Используя только P1, я могу преобразовать 3D-точку в правильную 2D-позицию экрана в OpenCV. Тем не менее, я испытываю трудности с использованием P1, чтобы получить эквивалент camera.projectionMatrix в three.js.

Я использую матрицу камеры OpenCV для преобразования проекции OpenGL, предложенного Гийомом Ноктуа Вот. Я принимаю матрицу камеры за верхний левый 3х3 от P1. Это создает вид камеры Three.js, который выглядит похожим, но не совсем выровненным (камера кажется повернутой по всей оси на градус или около того, возможно, с некоторыми небольшими, но явно ошибочными искажениями / сдвигами). Так что я что-то упустил. Нужно ли мне как-то тоже использовать выпрямительное преобразование R1? Я пытался использовать его в качестве матрицы вращения и поворачивать камеру three.js на эту величину, но это не улучшается.

Будем весьма благодарны за любые мысли об использовании матрицы OpenCV P1 и R1 для создания эквивалентного обзора камеры в three.js.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]