Есть ли способ создать карту глубины в реальном времени из видео с одной камеры в python/opencv?

Я пытаюсь преобразовать отдельные изображения в карту глубины, но не могу найти ни одного полезного руководства или документации.

Я хотел бы использовать opencv, но если вы знаете способ получить карту глубины, используя, например, tensorflow, я был бы рад это услышать.

Существует множество руководств по стереозрению, но я хочу сделать их дешевле, потому что это проект помощи слепым людям.

В настоящее время я использую камеру esp32 для потоковой передачи кадров за кадром и получаю изображения на python с помощью opencv.


person SurixOne    schedule 04.11.2020    source источник
comment
Глубина будет сложной, если у вас нет изображений из разных мест на одну и ту же цель. Глубину невозможно рассчитать по одному изображению без ссылки, так как у изображения отсутствует третье измерение. Если у вас есть одна движущаяся камера, вы можете сделать это, просмотрев исторические данные, но с одной стационарной камерой будет сложно. Вот почему у людей с одним глазом плохое восприятие глубины.   -  person flakes    schedule 04.11.2020


Ответы (1)


Обычно нам нужны фотометрические измерения из другого положения в мире, чтобы сформировать геометрическое представление о мире (также известное как карта глубины). Для одного изображения невозможно измерить геометрию, но можно сделать вывод о глубине на основе предварительного понимания.

Один из способов того, чтобы одно изображение работало, — это использовать метод, основанный на глубоком обучении, для определения глубины. Обычно все подходы, основанные на глубоком обучении, основаны на python, поэтому, если вы знакомы только с python, вам следует выбрать именно этот подход. Если изображение достаточно маленькое, я думаю, что это возможно для производительности в реальном времени. Есть много таких работ с использованием CAFFE, TF, TORCH и т. д., вы можете поискать на git hub для получения дополнительной информации. Тот, который я разместил здесь, - это то, что я использовал недавно

введите здесь описание изображения

ссылка: Godard, Clément, et al. Копаемся в самоконтролируемой монокулярной оценке глубины. Материалы международной конференции IEEE по компьютерному зрению. 2019.

Исходный код: https://github.com/nianticlabs/monodepth2

Другой способ — использовать видео с большим полем зрения для SLAM на основе одной камеры. У этого есть различные ограничения, такие как потребность в хороших функциях, большом поле зрения, замедленном движении и т. д. Вы можете найти многие из этих работ, такие как DTAM, LSDSLAM, DSO и т. д. Есть несколько других пакетов от HKUST или ETH, которые выполняют отображение с учетом положения (например, если у вас есть GPS/компас), некоторые из известных имен — REMODE+SVO open_quadtree_mapping и т. д.

Типичным примером SLAM на основе одной камеры может быть LSDSLAM. Это SLAM в реальном времени.

Этот реализован на основе ROS-C++, я помню, что они публикуют изображение глубины. И вы можете написать узел python для прямой подписки на глубину или на глобальное оптимизированное облако точек и спроецировать его на карту глубины под любым углом обзора.

введите здесь описание изображения

ссылка: Энгель, Якоб, Томас Шёпс и Даниэль Кремерс. LSD-SLAM: Крупномасштабный прямой монокулярный SLAM. Европейская конференция по компьютерному зрению. Спрингер, Чам, 2014.

исходный код: https://github.com/tum-vision/lsd_slam

person Dr Yuan Shenghai    schedule 04.11.2020