OpenCV Расчет глубины стереокамеры
Мы работали над полным решением, используя OpenCV и пару камер, чтобы определить расстояние обнаруженных объектов в сцене.
Нам удалось выполнить калибровку и получить разумное облако точек, которое мы можем отобразить.
Настройка калибровки не была идеальной, но результат выглядел удовлетворительным.
Это прояснило, что мы продолжили вычислять расстояние, используя внутренние и внешние данные, полученные в процессе калибровки.
Карта диспаратности выглядит хорошо, а глубина сцены при визуализации имеет смысл.
Что не имеет смысла, так это рассчитанное расстояние.
Я поставил все на git: https://github.com/depauwjimmy/stereoDepthPerception
Фотографии находятся в левом / правом каталоге.
Результат калибровки есть в обоих файлах yml.
Для справки я использую коробку над дровяной печью в центре. Реальное расстояние коробки составляет 3 метра.
Я использовал размер квадрата 3,5 см для калибровки.
Я пытался разными способами и параметрами получить карту диспаратности, но я всегда получаю результат около 130 (без умножения на squareSize), что слишком мало. reprojectImageTo3D дает тот же результат. Если я умножу на размер моего квадрата, это будет слишком высоко.
Теперь мне интересно, где может быть проблема.
Это калибровка, которая не достаточно хороша и приводит к таким ошибкам?
Каково влияние squareSize, используемого при калибровке, правильно ли умножать результат на него?
Может быть, я должен сделать это, но я делаю это неправильно. Или, может быть, я должен калибровать с использованием квадрата размером 1, а затем умножить результат на 3,5.
Мой код выглядит правильно для расчета расстояния?
Любая помощь будет высоко ценится.
Редактировать:
Я попытался улучшить карту диспаратности с помощью предварительной обработки, поскольку снимки делаются в условиях низкой освещенности.
Также мы попробовали и другие картинки. Насколько я понимаю, squareSize здесь не имеет значения, так как калибровка была сделана с использованием правильного в начале.
/ data / set_1 все еще полностью отключен для расстояния, что бы я ни пытался.
/ data / set_2 и set_3 лучше и правильно оценивают некоторые объекты, где другие не очень хороши.
Кажется, что падающая тень сильно влияет на возникновение ошибок. Первая коробка в передней части имеет одну, а указанная глубина неверна.
Кажется, что требуется располагать объект на разных расстояниях, чтобы карта диспаратности была точной.
Интересно, можно ли использовать эту систему во внешней / неконтролируемой среде?