Стереовосстановление облака точек на основе выпрямленных изображений
У меня есть пара подходящих 2D-объектов, извлеченных из выпрямленного стереоизображения. Используя функцию cvPerspectiveTransform в OpenCV, я попытался реконструировать эти функции в 3D. Результат не согласуется с фактическим измерением объекта в реальном мире. Я понимаю, что в наборе инструментов калибровки Matlab есть функция, которая преобразует 2D стерео функции в 3D облако точек. Тем не менее, функции сняты с оригинальных изображений.
Если я хочу работать с выпрямленными изображениями, можно ли восстановить трехмерные местоположения на основе местоположений двухмерных объектов и информации о несоответствии.
1 ответ
Если вам известны фокусное расстояние (f) и ширина базовой линии (b, расстояние оси проекции обеих камер), а также диспаратность (d) в паре выпрямленных стереоизображений, вы можете рассчитать расстояние (Z) с помощью следующая формула:
Z = f*(b/d);
Это следует из следующих уравнений:
x_l = f*(X/Z); // projecting a 3D point onto the left image
x_r = f*((X+b)/Z); // projecting the same 3D point onto the right image
d = x_r - x_l = f * (b/Z); // calculating the disparity
Решение последнего уравнения для Z
должно привести к формуле, приведенной выше.