exponenta event banner

Структура из обзора движения

Структура из движения (SfM) - процесс оценки 3-D структуры сцены по набору 2-D изображений. SfM используется во многих приложениях, таких как сканирование 3-D, дополненная реальность и визуальная одновременная локализация и отображение (vSLAM).

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

  • Размер объекта в сцене

  • Информация от другого датчика, например, одометра.

Структура из движения из двух видов

Для простого случая конструкции из двух стационарных камер или одной движущейся камеры одним видом должна считаться камера 1, а другим - камера 2. В этом сценарии алгоритм предполагает, что камера 1 находится в начале координат, а ее оптическая ось лежит вдоль оси Z.

  1. SfM требует точечных соответствий между изображениями. Найдите соответствующие точки, сопоставив элементы или отслеживая точки из изображения 1 в изображение 2. Методы отслеживания характеристик, такие как алгоритм Канаде-Лукас-Томази (KLT), хорошо работают, когда камеры находятся близко друг к другу. Когда камеры перемещаются дальше друг от друга, алгоритм KLT разрушается, и вместо этого можно использовать согласование функций.

    Расстояние между камерами (базовая линия)Метод поиска соответствий точекПример
    ШирокийСопоставление элементов с помощью matchFeaturesПоиск поворота изображения и масштабирования с помощью автоматического согласования элементов
    УзкийОтслеживание элементов с помощью vision.PointTrackerОбнаружение и отслеживание лица с помощью алгоритма KLT

  2. Чтобы найти позу второй камеры относительно первой камеры, необходимо вычислить основную матрицу. Для вычисления используйте соответствующие точки, найденные на предыдущем шаге. Основная матрица описывает эпиполярную геометрию двух камер. Он связывает точку в одной камере с эпиполярной линией в другой камере. Используйте estimateFundamentalMatrix функция для оценки фундаментальной матрицы.

  3. Введите основную матрицу в relativeCameraPose функция. relativeCameraPose возвращает ориентацию и местоположение второй камеры в системе координат первой камеры. Местоположение можно вычислить только до масштаба, поэтому расстояние между двумя камерами устанавливается равным 1. Другими словами, расстояние между камерами составляет 1 единицу.

  4. Определение 3-D местоположений совпадающих точек с помощью triangulate. Поскольку поза масштабируется, при вычислении структуры она имеет правильную форму, но не фактический размер.

    triangulate функция принимает две матрицы камеры, которые можно вычислить с помощью cameraMatrix.

  5. Использовать pcshow или pcplayer для отображения реконструкции. Использовать plotCamera визуализировать позы камеры.

Чтобы восстановить масштаб реконструкции, нужна дополнительная информация. Одним из способов восстановления масштаба является обнаружение объекта известного размера в сцене. Пример «Структура из движения из двух видов» показывает, как восстановить масштаб путем обнаружения сферы известного размера в облаке точек сцены.

Структура из движения из нескольких видов

Для большинства приложений, таких как робототехника и автономное вождение, SfM использует более двух ракурсов.

Подход, используемый для SfM из двух ракурсов, может быть расширен для нескольких ракурсов. Набор нескольких ракурсов, используемых для SfM, может быть упорядочен или неупорядочен. Используемый здесь подход предполагает упорядоченную последовательность представлений. Для SfM из нескольких представлений требуется соответствие точек для нескольких изображений, называемых дорожками. Типичный подход заключается в вычислении дорожек из попарно-точечных соответствий. Вы можете использовать imageviewset для управления попарными соответствиями и поиска дорожек. Каждая дорожка соответствует точке 3-D в сцене. Чтобы вычислить точки 3-D по дорожкам, используйте triangulateMultiview. Точка 3-D может храниться в worldpointset объект. worldpointset объект также сохраняет соответствие между точками 3-D и точками изображения 2-D на всех видах камеры.

Используя подход в SfM из двух ракурсов, можно найти позу камеры 2 относительно камеры 1. Чтобы расширить этот подход на случай с несколькими видами, найдите позу камеры 3 относительно камеры 2 и так далее. Относительные положения должны быть преобразованы в общую систему координат. Обычно все позиции камеры вычисляются относительно камеры 1 так, что все позиции находятся в одной и той же системе координат. Вы можете использовать imageviewset для управления позами камеры. imageviewset объект сохраняет представления и связи между представлениями.

Каждая оценка позы камеры от одного вида к другому содержит ошибки. Ошибки возникают из-за неточной локализации точек на изображениях, а также из-за шумных совпадений и неточной калибровки. Эти ошибки накапливаются при увеличении числа видов, эффект, известный как дрейф. Одним из способов уменьшения дрейфа является уточнение поз камеры и 3-D местоположений точек. Нелинейный алгоритм оптимизации, называемый регулировкой пучка, реализуемый bundleAdjustment , может использоваться для уточнения. Фиксировать позы камеры и уточнять только местоположения точек 3-D можно с помощью bundleAdjustmentMotion. Можно также исправить позы камеры и уточнить только 3-D расположения с помощью bundleAdjustmentStructure.

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

Пример «Структура из движения из двух видов» показывает, как реконструировать 3-D сцену из последовательности 2-D видов. В примере используется приложение «Калибратор камеры» для калибровки камеры, снимающей изображения. Он использует imageviewset для хранения и управления данными, связанными с каждым представлением.

В примере «Одновременная монокулярная визуальная локализация и отображение» показано, как обрабатывать данные изображения с монокулярной камеры для построения карты среды внутри помещения и оценки движения камеры.

См. также

Приложения

Функции

Объекты

Связанные темы