bundleAdjustment

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

Синтаксис

[xyzRefinedPoints,refinedPoses] = bundleAdjustment(xyzPoints,pointTracks,cameraPoses,cameraParams)
[___,reprojectionErrors] = bundleAdjustment(___)
[___] = bundleAdjustment(___,Name,Value)

Описание

пример

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

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

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

Поддержка генерации кода:
Генерация кода поддержек: нет
Блок MATLAB function поддержек: Нет
Поддержка генерации кода, указания по применению и ограничения

Примеры

свернуть все

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

load('sfmGlobe');

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

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

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

cameraSize = 0.1;
for j = 1:height(refinedPoses)
    id = refinedPoses.ViewId(j);
    loc = refinedPoses.Location{j};
    orient = refinedPoses.Orientation{j};
    plotCamera('Location',loc,'Orientation',orient,'Size',...
        cameraSize,'Color','r','Label',num2str(id),'Opacity',.5);
    hold on
end
pcshow(xyzRefinedPoints,'VerticalAxis','y','VerticalAxisDir',...
    'down','MarkerSize',45);
grid on

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

свернуть все

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

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

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

Параметры камеры, заданные как объект cameraParameters или cameraIntrinsics. Можно возвратить объект cameraParameters с помощью функции estimateCameraParameters. Объект cameraParameters содержит внутреннее, внешнее, и параметры искажения объектива камеры.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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