Структура от движения (SfM) является процессом оценки 3-D структуры сцены из набора 2D изображений. SfM используется во многих приложениях, таких как 3-D сканирование и дополненная реальность.
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
отобразить реконструкцию и использовать plotCamera
визуализировать положения камеры.
Чтобы восстановить шкалу реконструкции, вам нужна дополнительная информация. Один метод, чтобы восстановить шкалу должен обнаружить объект известного размера в сцене. Структура От Движения Из Двух примеров Представлений показывает, как восстановить шкалу путем обнаружения сферы известного размера в облаке точек сцены.
Для большинства приложений, таких как робототехника и автономное управление автомобилем, SfM использует больше чем два представления.
Подход, используемый в SfM от двух представлений, может быть расширен для нескольких представлений. Набор нескольких представлений, используемых в SfM, может быть упорядочен или не упорядочен. Подход, проявленный здесь, принимает упорядоченную последовательность представлений. SfM от нескольких представлений требует соответствий точки через повторные изображения, названные tracks. Типичный подход должен вычислить дорожки из попарных соответствий точки. Можно использовать viewSet
управлять попарными соответствиями и найти дорожки. Каждая дорожка соответствует 3-D точке в сцене. Чтобы вычислить 3-D точки из дорожек, используйте triangulateMultiview
.
Используя подход в SfM от двух представлений, можно найти положение камеры 2 относительно камеры 1. Чтобы расширить этот подход к нескольким просматривают случай, находят положение камеры 3 относительно камеры 2, и так далее. Относительные положения должны быть преобразованы в общую систему координат. Как правило, все положения камеры вычисляются относительно камеры 1 так, чтобы все положения были в той же системе координат. Можно использовать viewSet
управлять положениями камеры. viewSet
объектно-ориентированная память представления и связи между представлениями.
Каждая оценка положения камеры от одного представления до следующего содержит ошибки. Ошибки являются результатом неточной локализации точки в изображениях, и от шумных соответствий и неточной калибровки. Эти ошибки накапливаются как количество увеличений представлений, эффект, известный как drift. Один способ уменьшать дрейф, должен совершенствовать положения камеры и 3-D местоположения точки. Нелинейный алгоритм оптимизации, названный bundle adjustment, реализован bundleAdjustment
функционируйте, может использоваться в улучшении.
Структура От Движения Из Двух примеров Представлений показывает, как восстановить 3-D сцену из последовательности 2D представлений. Пример использует приложение Camera Calibrator, чтобы калибровать камеру, которая получает представления. Это использует viewSet
возразите, чтобы сохранить и управлять данными, сопоставленными с каждым представлением.
Camera Calibrator | Stereo Camera Calibrator | bundleAdjustment
| cameraMatrix
| estimateFundamentalMatrix
| matchFeatures
| pointTrack
| relativeCameraPose
| triangulateMultiview
| viewSet
| vision.PointTracker