triangulateMultiview

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

Описание

пример

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

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

Примеры

свернуть все

Загрузите изображения в рабочей области.

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

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

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

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

intrinsics = data.cameraParams.Intrinsics;

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

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

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

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

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

vSet = imageviewset;
vSet = addView(vSet,1,rigid3d(orientations(:,:,1),locations(1,:)),...
    'Points',pointsPrev);

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

for i = 2:images.Count
  I = rgb2gray(read(images,i));
  I = undistortImage(I,intrinsics);
  points = detectSURFFeatures(I);
  [features,points] = extractFeatures(I,points);
  vSet = addView(vSet,i,rigid3d(orientations(:,:,i), locations(i,:)),...
      'Points',points);
  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,intrinsics);
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.2);
hold off

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

свернуть все

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

Информация о положении камеры в виде 2D столбца или таблицы с тремя столбцами. Можно получить cameraPoses от imageviewset объект при помощи poses объектная функция.

Таблица 2D столбца

СтолбецОписание
ViewIDПросмотрите идентификатор в pointTrack объект в виде целого числа.
AbsolutePoseАбсолютное положение представления в виде rigid3d объект. Можно получить AbsolutePose от imageviewset объект при помощи poses объектная функция.

Таблица с тремя столбцами

СтолбецОписание
ViewIDПросмотрите идентификатор в pointTrack объект в виде целого числа.
OrientationОриентация камеры в виде 3х3 матрицы вращения.
LocationМестоположение камеры координирует в виде трехэлементного вектора формы [x, y, z] и представленный в модулях данных родительских осей.

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

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

свернуть все

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

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

Ошибки перепроекции, возвращенные как N - вектор элемента. Вычислить ошибки перепроекции, сначала функциональные проекты каждая мировая точка назад в каждое изображение. Затем в каждом изображении, функция вычисляет расстояние между обнаруженным и повторно спроектированной точкой. Каждый элемент reprojectionErrors выход является средней ошибкой перепроекции для соответствующей мировой точки в xyzPoints вывод .Section of a checkerboard showing a point detected in the image
                                    a small distance from the 3-D point reprojected into the image.
                                    The distance between them is marked as the reprojection
                                    error.

Советы

Прежде, чем обнаружить точки, откорректируйте изображения для искажения объектива при помощи при помощи undistortImage функция. В качестве альтернативы можно непосредственно не исказить точки при помощи undistortPoints функция.

Ссылки

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

Введенный в R2016a