в формате OpenCV глубина точность карте

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

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

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

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

спасибо.

2 ответов


Если вы посмотрите на абзац после Формулы 8 в документ по ссылке вы можете видеть, что они имеют точность несоответствия 0.18*10^-6m. Читая немного дальше, я прихожу к выводу, что точность диспаритета, которую они используют, - это расстояние в м между двумя пикселями на CCD используемых камер. Для 1/4 " CCD (который измеряет 3,2 мм на 2,4 мм) с разрешением 640X480 (очень старая VGA-камера) это будет 5*10^-6. Я не знаю, какой размер датчика для LG Optimus 3D, но предполагая 1/4" Разрешение ККД и 2592 пиксела горизонтальное, базис для точности несоответствия было бы: 1.23*10^-6, давая точность глубины на 10м около 0.85 м. Что кажется мне разумным. Если CCD меньше, он улучшится (т. е. значение точности снижается).

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


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

формула такая:

dD = dd * D^2 / fB

где:

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

если f = 6mm = 0.006m, B = 24mm = 0.024m, D = 10m, dd это 1 пиксель [назовем его P на данный момент, но обычно это около 1.4 um].

подключение всех номеров в дает:

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 пикселей между левым и правым датчиками.

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