Получить 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()
,