Структура от движения (SfM) является процессом оценки 3-D структуры сцены из набора 2D изображений. SfM используется во многих приложениях, таких как 3-D сканирование, дополненная реальность и визуальная одновременная локализация и картография (vSLAM).
SfM может быть вычислен многими различными способами. Путь, которым вы приближаетесь к проблеме, зависит от различных факторов, таких как номер и тип камер, используемых, и упорядочены ли изображения. Если изображения взяты с одной калиброванной камерой, то 3-D структурой и движением камеры может только быть восстановленный up to scale. up to scale означает, что можно перемасштабировать структуру и величину движения камеры и все еще обеспечить наблюдения. Например, если вы помещаете камеру близко к объекту, вы видите то же изображение как тогда, когда вы увеличиваете объект и перемещаете камеру далеко. Если вы хотите вычислить фактическую шкалу структуры и движения в мировых единицах измерения, вам нужна дополнительная информация, такая как:
Размер объекта в сцене
Информация от другого датчика, например, одометра.
Для простого случая структуры от двух стационарных камер или одной движущейся камеры, одно представление должно быть рассмотрено камерой 1 и другой одной камерой 2. В этом сценарии алгоритм принимает, что камера 1 в начале координат, и его оптическая ось простирается вдоль z - ось.
SfM требует соответствий точки между изображениями. Найдите соответствующие точки или путем соответствия с функциями или отслеживания точек от изображения 1, чтобы отобразить 2. Покажите методы отслеживания, такие как алгоритм Kanade-Lucas-Tomasi (KLT), работайте хорошо, когда камеры будут близко друг к другу. Когда камеры перемещаются далее независимо, алгоритм KLT ломается, и функция, соответствующая, может быть использована вместо этого.
Расстояние между камерами (базовая линия) | Метод для нахождения соответствий точки | Пример |
---|---|---|
Широкий | Совпадайте с функциями с помощью matchFeatures | Поиск Поворота и Масштаба Изображения с Помощью Автоматического Сопоставления Объектов |
Узкий | Отследите функции с помощью vision.PointTracker | Столкнитесь с обнаружением и отслеживающий Используя алгоритм KLT |
Чтобы найти положение второй камеры относительно первой камеры, необходимо вычислить основную матрицу. Используйте соответствующие точки, найденные на предыдущем шаге для расчета. Основная матрица описывает epipolar геометрию этих двух камер. Это связывает точку в одной камере к epipolar линии в другой камере. Используйте estimateFundamentalMatrix
функционируйте, чтобы оценить основную матрицу.
Введите основную матрицу к relativeCameraPose
функция. relativeCameraPose
возвращает ориентацию и местоположение второй камеры в системе координат первой камеры. Местоположение может только быть вычислено, чтобы масштабироваться, таким образом, расстояние между двумя камерами установлено в 1. Другими словами, расстояние между камерами задано, чтобы быть 1 модулем.
Определите 3-D местоположения совпадающего использования точек triangulate
. Поскольку положение предоставлено право масштабироваться, когда вы вычисляете структуру, оно имеет правильную форму, но не фактический размер.
triangulate
функционируйте берет две матрицы камеры, которые можно вычислить использование cameraMatrix
.
Использование pcshow
или pcplayer
отобразить реконструкцию. Использование plotCamera
визуализировать положения камеры.
Чтобы восстановить шкалу реконструкции, вам нужна дополнительная информация. Один метод, чтобы восстановить шкалу должен обнаружить объект известного размера в сцене. Структура От Движения Из Двух примеров Представлений показывает, как восстановить шкалу путем обнаружения сферы известного размера в облаке точек сцены.
Для большинства приложений, таких как робототехника и автономное управление автомобилем, SfM использует больше чем два представления.
Подход, используемый для SfM от двух представлений, может быть расширен для нескольких представлений. Набор нескольких представлений, используемых для SfM, может быть упорядочен или не упорядочен. Подход, проявленный здесь, принимает упорядоченную последовательность представлений. SfM от нескольких представлений требует соответствий точки через повторные изображения, названные tracks. Типичный подход должен вычислить дорожки из попарных соответствий точки. Можно использовать imageviewset
управлять попарными соответствиями и найти дорожки. Каждая дорожка соответствует 3-D точке в сцене. Чтобы вычислить 3-D точки из дорожек, использовать triangulateMultiview
. 3-D точка может храниться в worldpointset
объект. worldpointset
возразите также хранит соответствие между 3-D точками и 2D точками изображений через поля зрения камеры.
Используя подход в SfM от двух представлений, можно найти положение камеры 2 относительно камеры 1. Чтобы расширить этот подход к нескольким просматривают случай, находят положение камеры 3 относительно камеры 2, и так далее. Относительные положения должны быть преобразованы в общую систему координат. Как правило, все положения камеры вычисляются относительно камеры 1 так, чтобы все положения были в той же системе координат. Можно использовать imageviewset
управлять положениями камеры. imageviewset
объектно-ориентированная память представления и связи между представлениями.
Каждая оценка положения камеры от одного представления до следующего содержит ошибки. Ошибки являются результатом неточной локализации точки в изображениях, и от шумных соответствий и неточной калибровки. Эти ошибки накапливаются как количество увеличений представлений, эффект, известный как drift. Один способ уменьшать дрейф, должен совершенствовать положения камеры и 3-D местоположения точки. Нелинейный алгоритм оптимизации, названный bundle adjustment, реализованным bundleAdjustment
функционируйте, может использоваться для улучшения. Можно зафиксировать положения камеры и совершенствовать только 3-D использование местоположений точки bundleAdjustmentMotion
. Можно также зафиксировать положения камеры и совершенствовать только 3-D использование местоположений bundleAdjustmentStructure
.
Другой метод сокращения дрейфа при помощи pose graph optimization по imageviewset
объект. Однажды существует обнаруженное закрытие цикла, добавьте снова связь с imageviewset
возразите и используйте optimizePoses
функция, чтобы совершенствовать положения камеры, ограниченные относительными положениями.
Структура От Движения Из Двух примеров Представлений показывает, как восстановить 3-D сцену из последовательности 2D представлений. Пример использует приложение Camera Calibrator, чтобы калибровать камеру, которая получает представления. Это использует imageviewset
возразите, чтобы сохранить и управлять данными, сопоставленными с каждым представлением.
Монокулярный Визуальный Одновременный пример Локализации и картографии показывает вам, как обработать данные изображения от монокулярной камеры, чтобы создать карту внутренней среды и оценить движение камеры.
bundleAdjustment
| bundleAdjustmentStructure
| bundleAdjustmentMotion
| relativeCameraPose
| triangulateMultiview
| estimateFundamentalMatrix
| matchFeatures
| pointTrack
| cameraMatrix