Стереовосстановление облака точек на основе выпрямленных изображений

У меня есть пара подходящих 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 должно привести к формуле, приведенной выше.

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