bundleAdjustment

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

Описание

пример

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

[___,reprojectionErrors] = bundleAdjustment(___) дополнительно возвращает N - вектор элемента, содержащий среднюю ошибку перепроекции для каждой 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. The axes 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 матрицы вращения. Местоположения заданы как трехэлементные векторы.

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

Аргументы в виде пар имя-значение

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

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

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

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

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

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

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

Отобразите информацию о прогрессе в виде разделенной запятой пары, состоящей из 'Verbose'и любой false или true.

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

свернуть все

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

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

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

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

Ссылки

[1] Lourakis, M.I.A., и А.А. Аргирос. "SBA: пакет программного обеспечения для типовой разреженной корректировки пакета". Транзакции ACM на математическом программном обеспечении. 2009.

[2] Хартли, R. и А. Зиссермен. Несколько просматривают геометрию в компьютерном зрении. Издательство Кембриджского университета, 2003.

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

Введенный в R2016a