bundleAdjustment

Уточнение положения камеры и 3-D точек

Описание

пример

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

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

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

свернуть все

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

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

Фотоаппарат положения ViewId, Orientation, и Location информация, заданная в виде трехколоночной таблицы. Идентификаторы представления относятся к идентификаторам в pointTracks объект. Ориентации заданы как матрицы поворота 3 на 3. Местоположения заданы как трехэлементные векторы.

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

Ссылки

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

[2] Хартли, Р. и А. Зиссерман. Несколько видов геометрии в Компьютерное Зрение. Cambridge University Press, 2003.

[3] Триггс, Б., П. Маклаучлан, Р. Хартли и А. Фицгиббон. Bundle Adjustment: A Modern Synthesis (неопр.) (недоступная ссылка). Материалы Международного практикума по алгоритмам видения. Springer-Verlag. 1999, с. 298-372.

Введенный в R2016a