bundleAdjustment

Совершенствуйте 3-D точки и положения камеры

Описание

пример

[xyzRefinedPoints,refinedPoses] = bundleAdjustment(xyzPoints,pointTracks,cameraPoses,intrinsics) совершенствовал 3-D точки и положения камеры, чтобы минимизировать ошибки перепроекции. Процедура улучшения является вариантом алгоритма Levenberg-Marquardt. Функция использует ту же глобальную систему координат привязки, чтобы возвратить и 3-D точки и положения камеры.

[___,reprojectionErrors] = bundleAdjustment(___) возвращает среднюю ошибку перепроекции для каждой 3-D мировой точки, в дополнение к аргументам от предыдущего синтаксиса.

[___] = bundleAdjustment(___,Name,Value) задает опции с помощью одних или нескольких аргументов name-value. Незаданные аргументы имеют значения по умолчанию.

Примеры

свернуть все

Загрузите данные для инициализации.

data = load('sfmGlobe');

Совершенствуйте положения камеры и точки.

[xyzRefinedPoints,refinedPoses] = ...
    bundleAdjustment(data.xyzPoints,data.pointTracks,data.cameraPoses,data.intrinsics);

Отобразите усовершенствованные 3-D точки и положения камеры.

pcshow(xyzRefinedPoints,'VerticalAxis','y','VerticalAxisDir', ...
    'down','MarkerSize',45)
hold on
plotCamera(refinedPoses,'Size',0.1)
hold off
grid on

Figure contains an axes object. The axes object contains 51 objects of type line, text, patch, scatter.

Входные параметры

свернуть все

Неочищенные 3-D точки в виде M-by-3 матрица [x y z] местоположения.

Соответствие с точками через повторные изображения в виде N - массив элемента pointTrack объекты. Каждый элемент содержит две или больше соответствующих точки через повторные изображения.

Положение камеры ViewId, Orientation, и Location информация в виде таблицы с тремя столбцами. Представление IDs относится к идентификаторам объектов в pointTracks аргумент. Задайте ориентации 3х3 вращение матрицы. Задайте местоположения как трехэлементные векторы

Внутренние параметры камеры в виде cameraIntrinsics возразите или N - массив элемента cameraIntrinsics объекты. N является количеством положений камеры. Используйте один cameraIntrinsics возразите, когда изображения будут получены с помощью той же камеры. Используйте векторный cameraIntrinsics объекты, когда изображения получены различными камерами.

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'MaxIterations', 50

Максимальное количество итераций перед алгоритмом Levenberg-Marquardt останавливается в виде положительного целого числа.

Абсолютный допуск завершения среднеквадратической ошибки перепроекции в пикселях в виде положительной скалярной величины.

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

Отметьте, чтобы указать на искажение объектива в виде false или true. Когда вы устанавливаете PointsUndistorted к false, 2D точки в pointTracks должен быть от изображений с искажением объектива. Чтобы использовать неискаженные точки, сначала используйте undistortImage функция, чтобы удалить искажения из изображений, затем установите PointsUndistorted.

Просмотрите идентификаторы для фиксированного положения камеры в виде вектора из неотрицательных целых чисел. Каждый ID соответствует ViewId из фиксированной камеры позируют в cameraPoses. Пустое значение для FixedViewIDs средние значения, что все положения камеры оптимизированы.

Решатель в виде 'sparse-linear-algebra' или 'preconditioned-conjugate-gradient'. Используйте 'sparse-linear-algebra' решатель для низких изображений разреженности. Низкая разреженность указывает, что много полей зрения камеры наблюдают некоторые из тех же мировых точек. Используйте 'preconditioned-conjugate-gradient' (PCG) решатель, от общей графической оптимизации (g2o) библиотека, для высоких изображений разреженности. Высокая разреженность указывает, что каждое поле зрения камеры наблюдает, только небольшая часть мировых точек, заданных xyzPoints.

Отобразите информацию о прогрессе в виде false или true.

Выходные аргументы

свернуть все

3-D местоположения усовершенствованных мировых точек, возвращенных как M-by-3 матрица [x y z] местоположения.

Типы данных: single | double

Усовершенствованные положения камеры, возвращенные как таблица с тремя столбцами. Таблица содержит столбцы для ViewId, Orientation, и Location.

Ошибки перепроекции, возвращенные как M - вектор элемента. Функциональные проекты каждая мировая точка назад в каждую камеру. Затем в каждом изображении функция вычисляет ошибку перепроекции как расстояние между обнаруженным и повторно спроектированной точкой. reprojectionErrors вектор содержит среднюю ошибку перепроекции для каждой мировой точки.

Detected point and reprojected point next to each other, with reprojection error as the distance between them

Ссылки

[1] Lourakis, Мэнолис Ай. А. и Антонис А. Аргирос. "SBA: Пакет программного обеспечения для Типовой Разреженной Корректировки Пакета". Транзакции ACM на Mathematical Software 36, № 1 (март 2009): 2:1–2:30.

[2] Хартли, Ричард и Эндрю Зиссермен. Несколько Геометрия Представления в Компьютерном зрении. 2-й редактор Кембридж, Великобритания  ; Нью-Йорк: Издательство Кембриджского университета, 2003.

[3] Triggs, счет, Филип Ф. Маклочлан, Ричард Ай. Хартли и Эндрю В. Фицджиббон. "Свяжите корректировку — современный синтез". В продолжениях международного семинара на алгоритмах визуализации, 298–372. Springer-Verlag, 1999.

Введенный в R2016a