triangulateMultiview

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

Описание

пример

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

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

[worldPoints,reprojectionErrors,validIndex] = triangulateMultiview(___) дополнительно возвращает индексы допустимых и недопустимых мировых точек. Актуальные вопросы расположены перед камерами.

Примеры

свернуть все

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

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

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

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

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

intrinsics = data.cameraParams.Intrinsics;

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

I = im2gray(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 = im2gray(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

Figure contains an axes object. The axes object contains 51 objects of type line, text, patch, scatter.

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

свернуть все

Совпадающие точки через повторные изображения в виде 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 выход является средней ошибкой перепроекции для соответствующей мировой точки в worldPoints вывод .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.

Валидность мировых точек, возвращенных как M-by-1 логический вектор. Актуальные вопросы, обозначенные как логический 1 TRUE), расположены перед камерами. Недопустимые точки, обозначенные как логический 0 ложь), расположены позади камер.

Валидность мировой точки относительно положения камеры определяется путем проектирования мировой точки на изображение с помощью матрицы камеры и однородных координат. Мировая точка допустима, если получившийся масштабный коэффициент положителен.

Советы

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

Ссылки

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

Введенный в R2016a