triangulateMultiview

3-D местоположения неискаженных точек соответствующими через повторные изображения

Синтаксис

xyzPoints = triangulateMultiview(pointTracks,cameraPoses,cameraParams)
[xyzPoints,reprojectionErrors] = triangulateMultiview(pointTracks,cameraPoses,cameraParams)

Описание

пример

xyzPoints = triangulateMultiview(pointTracks,cameraPoses,cameraParams) возвращает местоположения 3-D мировых точек, которые соответствуют точкам, соответствующим через повторные изображения, взятые с калиброванной камерой.

[xyzPoints,reprojectionErrors] = triangulateMultiview(pointTracks,cameraPoses,cameraParams) также возвращает ошибки перепроекции для мировых точек.

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

Примеры

свернуть все

Загрузите изображения.

imageDir = fullfile(toolboxdir('vision'),'visiondata',...
    'structureFromMotion');
images = imageSet(imageDir);

Загрузите предварительно вычисленные параметры камеры.

load(fullfile(imageDir,'cameraParams.mat'));

Вычислите функции первого изображения.

I = rgb2gray(read(images,1));
I = undistortImage(I,cameraParams);
pointsPrev = detectSURFFeatures(I);
[featuresPrev,pointsPrev] = extractFeatures(I,pointsPrev);

Загрузите местоположения камеры и ориентации.

load(fullfile(imageDir,'cameraPoses.mat'));

Создайте объект viewSet.

vSet = viewSet;
vSet = addView(vSet, 1,'Points',pointsPrev,'Orientation',...
    orientations(:,:,1),'Location',locations(1,:));

Вычислите функции и соответствия для остальной части изображений.

for i = 2:images.Count
  I = rgb2gray(read(images, i));
  I = undistortImage(I, cameraParams);
  points = detectSURFFeatures(I);
  [features, points] = extractFeatures(I, points);
  vSet = addView(vSet,i,'Points',points,'Orientation',...
      orientations(:,:,i),'Location',locations(i,:));
  pairsIdx = matchFeatures(featuresPrev,features,'MatchThreshold',5);
  vSet = addConnection(vSet,i-1,i,'Matches',pairsIdx);
  featuresPrev = features;
end

Найдите дорожки точки.

tracks = findTracks(vSet);

Получите положения камеры.

cameraPoses = poses(vSet);

Найдите 3-D мировые точки.

[xyzPoints,errors] = triangulateMultiview(tracks,cameraPoses,cameraParams);
z = xyzPoints(:,3);
idx = errors < 5 & z > 0 & z < 20;
pcshow(xyzPoints(idx, :),'VerticalAxis','y','VerticalAxisDir','down','MarkerSize',30);
hold on
plotCamera(cameraPoses, 'Size', 0.1);
hold off

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

свернуть все

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

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

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

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

свернуть все

3-D мировые точки, заданные как N-by-3 массив [x, y, z] координаты.

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

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

Советы

Поскольку triangulateMultiview не составляет искажение объектива, можно не исказить изображения прежде, чем обнаружить точки при помощи undistortImage. Также можно не исказить точки непосредственно с помощью undistortPoints.

Ссылки

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

Введенный в R2016a