точность карты глубины opencv - PullRequest
11 голосов
/ 17 августа 2011

Я хочу измерить расстояние до объекта с помощью телефона с 3D стереоскопической камерой и opencv.Я ищу формулу, которая будет измерять точность измерения расстояния, в зависимости от фокусного расстояния, расстояния между двумя камерами, разрешения изображения и размера измеряемого объекта.Немного погуглив, я нашел эту формулу:

d = Z ^ 2 * p / (f * b)

Z - расстояние до объекта, p - точность диспаратности, f - фокусное расстояние,b - базовая линия (расстояние между камерами).

Я знаю базовую линию и фокусное расстояние, но не знаю точности диспаратности.Эта формула мне нужна?Если так, как я могу найти точность несоответствия?

Спасибо.

Ответы [ 2 ]

12 голосов
/ 27 октября 2012

Я понимаю, что это год с опозданием, но на случай, если кто-то найдет это.

Формула такова:

dD = dd * D^2 / fB

где:

  • dd = ошибка несоответствия
  • dD = ошибка глубины
  • D = глубина
  • f = фокусное расстояние
  • B = базовый уровень

, если f = 6mm = 0.006m, B = 24mm = 0.024m, D = 10m, dd равен 1 пикселю (назовем сейчас P, но обычно это около 1,4um).

Включение всех чисел в дает:

dD = P * 10^2 / (0.006 * 0.024) ~ 694444 P

Для P=1.4um, dD = 0.97 m (что составляет около 9,7%).

Теперь предполагается, что ваша корреспонденция дает ошибку в один пиксель. Вы можете выполнять субпиксельный поиск и, в зависимости от уровня шума и текстуры на изображении, вы можете получить субпиксельное точное соответствие. В этом случае ваша точность будет немного лучше.

Обратите внимание, что эта формула для ошибки. Карта между несоответствием и глубиной выглядит следующим образом:

d = fB / D

где:

  • d = несоответствие
  • D = глубина
  • f = фокусное расстояние
  • B = базовый уровень

Аналогично, добавление чисел дает:

d = (0.006 * 0.024 / 10) m = 0.0000144 m = 0.0144 mm = 14.4 um.

если вы предполагаете, что размер вашего пикселя составляет около 1.4um, то 14.4um составляет около 10 пикселей. Это согласуется с ошибкой выше - это означает, что ошибка в 1 пиксель составляет примерно 10%.

Автомобиль, который находится на расстоянии 10 метров, сдвинут на 10 пикселей между левым и правым датчиками.

Надеюсь, это поможет.

5 голосов
/ 18 августа 2011

Если вы посмотрите на абзац после формулы 8 в документе , на который вы ссылаетесь , вы увидите, что они имеют точность диспаратности 0,18 * 10 ^ -6 м.Читая немного дальше, я заключаю, что точность диспаратности, которую они используют, - это расстояние в м между двумя пикселями на ПЗС используемых камер.Для 1/4 "ПЗС (размером 3,2 мм на 2,4 мм) с разрешением 640X480 (очень старая камера VGA) это будет 5 * 10 ^ -6. Я не знаю, какой размер сенсора для LG Optimus 3Dесть, но при условии 1/4 "ПЗС-матрицы и горизонтального разрешения 2592 пикселя, базовая линия для точности диспаратности будет: 1,23 * 10 ^ -6, что дает точность глубины при 10 м около 0,85 м.Что выглядит разумным для меня.Если ПЗС меньше, он улучшится (т. Е. Значение точности снизится).

Это наименьшее возможное значение, которое предполагает идеальное совпадение характеристик двух стереоизображений.Это значение просто представляет физические ограничения вашей стереопары.

...