Получить 3D-координаты из двух 2D-кадров

Я не смог найти правильный ответ на мою проблему в Интернете, поэтому я спрошу его здесь. Допустим, мы получили две 2D фотографии одного и того же места, сделанные с немного разных углов. Я выбрал набор точек (обнаружение краев), нашел соответствия между ними (какая точка есть какая на другой фотографии). Теперь мне нужно как-то узнать мировые координаты этих точек в 3D.

За последние 5 часов я много читал об этом, но до сих пор не могу понять, какие шаги я должен следовать. Я пытался оценить движение камеры с помощью функции recoverPose применяется к основной матрице и двум наборам точек на каждом кадре. Я не могу понять, что это дает мне, когда я знаю матрицы вращения и перевода (чтоrecoverPose возвращается). Что я должен сделать, чтобы достичь своей цели?

Я также знаю калибровочную матрицу моей камеры (я использую набор данных KITTI). Я прочитал документацию OpenCV, но до сих пор не понимаю. Это монокулярное зрение.

1 ответ

Если у вас есть cameraMatrix и distCoeffs вектор для вашей камеры (полученный из, предположительно, calibrateCamera() функция), и у вас также есть матрица вращения R и вектор перевода T для двух положений камеры, вы можете использовать stereoRectify() для того, чтобы получить проекционные матрицы. См. Документацию OpenCV по этой функции. Так как это та же камера в вашем случае, передайте ту же cameraMatrix а также distCoeffs Я думаю, что вместо первой и второй камер.

Затем используйте полученные проекционные матрицы в trinangulatePoints(), Для заданного набора точек, определенных 2D-координатами в двух плоскостях изображения, он восстанавливает точки реального мира в однородные координаты в формате [X, Y, Z, W], Чтобы получить трехмерные координаты, разделите первые три на W,

Или, как указано в документации, если вы представляете свои стереоданные с помощью матрицы диспаратности, а не двух векторов точек, вы можете использовать reprojectImageTo3D() с эквивалентным эффектом. Хотя требуется матрица репроекции Q который также получен из stereoRectify(),

Другие вопросы по тегам