я получаю точку изображения в левой камере (pointL) и соответствующую точку изображения в правой камере (pointR) из моя стереокамера с использованием соответствия функций. Две камеры параллельны и имеют одно и то же «высоту». Между ними существует только x-перевод.OpenCV стерео видения 3D координат в 2D проекции камеры плоскость отличается от триангуляции 2D точек в 3D
Я также знаю матрицы проекций для каждой камеры (projL, projR), которые я получил во время калибровки, используя initUndistortRectifyMap
.
Для триангулирующего точки, я называю: triangulatePoints(projL, projR, pointL, pointR, pos3D)
(documentation), где pos3D является выходной 3D положения объекта.
Теперь я хочу проект 3D-координаты к 2D-изображения левой камеры:
2Dpos = projL * 3dPos
Полученная х-координата правильно , Но y-coodinate составляет около 20 пикселей.
Как это исправить?
Edit: Конечно, мне нужно использовать однородные координаты, для того, чтобы умножить его на матрицу проекции (3х4). По этой причине я установил:
3dPos[0] = x;
3dPos[1] = y;
3dPos[2] = z;
3dPos[3] = 1;
Это неправильно, чтобы установить 3dPos[3]
в 1
?
Примечание:
- Всех изображения переназначены, я делаю это в своем роде предварительной обработки шага.
- Конечно, я всегда использую однородные координаты
Вы знаете, как это сделать в OpenCV? Я попытался найти любое решение; не нашел. – black
Покажите, что вы пробовали. –
Я понимаю, что я должен не допустить, чтобы мой 2pos получил у меня формулу в вопросе, верно? Но на этом сайте (http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html) я не нашел решения, чтобы не допустить определенного момента. Существует только решение применить карту исправления ко всему мат. – black