estimateGeometricTransform3D

Оцените 3-D геометрическое преобразование от соответствия с парами точки

Описание

пример

tform = estimateGeometricTransform3D(matchedPoints1,matchedPoints2,transformType) оценивает 3-D геометрическое преобразование между двумя наборами 3-D точек путем отображения inliers в совпадающих точках от одного набора 3-D точек matchedPoints1 к inliers в совпадающих точках от другого набора 3-D точек matchedPoints2.

[tform,inlierIndex] = estimateGeometricTransform3D(___) дополнительно возвращает вектор, задающий каждую совпадающую пару точки или как inlier или как выброс с помощью входных параметров от предыдущего синтаксиса.

[tform,inlierIndex,status] = estimateGeometricTransform3D(___) дополнительно возвращает код статуса, указывающий, могла ли функция оценить преобразование и, в противном случае почему она перестала работать. Если вы не задаете status выведите, функция вместо этого возвращает ошибку для условий, которые не могут привести к результатам.

[___] = estimateGeometricTransform3D(___, Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой комбинации аргументов от предыдущих синтаксисов. Например, 'Confidence',99 устанавливает значение доверия для нахождения максимального количества inliers к 99.

Примеры

свернуть все

Загрузите файл облака точек в рабочую область.

ptCloud1 = pcread('teapot.ply')
ptCloud1 = 
  pointCloud with properties:

     Location: [41472×3 single]
        Count: 41472
      XLimits: [-3 3.4340]
      YLimits: [-2 2]
      ZLimits: [0 3.1500]
        Color: []
       Normal: []
    Intensity: []

ptCloud1 = pcdownsample(ptCloud1,'random',0.25);  

Создайте твердый 3-D объект преобразования с вращением с 30 степенями.

theta = 30; % degrees
rot = [cosd(theta)  sind(theta) 0; ...
      -sind(theta)  cosd(theta) 0; ...
            0           0       1];
trans = [0 0 0];
tform = rigid3d(rot,trans);

Преобразуйте облако точек с помощью объекта преобразования.

ptCloud2 = pctransform(ptCloud1,tform);

Чтобы ввести шум, добавьте случайные точки в оба облака точек.

noise1 = rescale(rand(1000,3),-2,2);
ptCloud1 = pointCloud([ptCloud1.Location;noise1]);
noise2 = rescale(rand(1000,3),-2,2);
ptCloud2 = pointCloud([ptCloud2.Location;noise2]);

Визуализируйте шумные облака точек.

figure
pcshowpair(ptCloud1,ptCloud2)
title('Point Clouds With Added Noise')

Извлеките соответствующие точки из облаков точек.

matchedPoints1 = ptCloud1.Location;
matchedPoints2 = ptCloud2.Location;

Оцените твердое преобразование между облаками точек.

[tformEst,inlierIndex] = estimateGeometricTransform3D(matchedPoints1, ...
    matchedPoints2,'rigid'); 

Извлеките точки inlier.

inliersPtCloud1 = transformPointsForward(tformEst,matchedPoints1(inlierIndex,:));
inliersPtCloud2 = matchedPoints2(inlierIndex,:);

Визуализируйте inliers выровненных облаков точек.

figure
firstPtCloud = pointCloud(inliersPtCloud1);
secondPtCloud = pointCloud(inliersPtCloud2);
pcshowpair(firstPtCloud,secondPtCloud)
title('Aligned point clouds')

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

свернуть все

Первый набор совпадающих 3-D точек в виде M-by-3 матрица, в которой каждая строка является рядом (x, y, z) координаты и M, является количеством совпадающих точек.

Второй набор совпадающих 3-D точек в виде M-by-3 матрица, в которой каждая строка является рядом (x, y, z) координаты и M, является количеством совпадающих точек.

Тип преобразования в виде 'rigid' или 'similarity'. Каждый преобразовывает тип, требует, чтобы минимальное количество совпадающих пар точек оценило преобразование. Можно обычно улучшать точность преобразования при помощи большего числа совпадающих пар точек. Эта таблица показывает тип объекта, сопоставленного с каждым типом преобразования и минимальным количеством совпадающих пар точек, которых требует преобразование.

transformTypetform ОбъектМинимальное количество совпадающих пар точек
'rigid'rigid3d3
'similarity'affine3d3

Типы данных: string

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

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

Пример: 'Confidence',99 устанавливает значение доверия для нахождения максимального количества inliers к 99.

Максимальное количество случайных испытаний в виде разделенной запятой пары, состоящей из 'MaxNumTrials' и положительное целое число. Это значение задает количество рандомизированных попыток, которые функция предпринимает, чтобы найти соответствие с парами точки. Определение более высокого значения заставляет функцию выполнять дополнительные расчеты, который увеличивает вероятность нахождения inliers.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Доверие нахождения максимального количества inliers в виде разделенной запятой пары, состоящей из 'Confidence' и положительный числовой скаляр в области значений (0, 100). Увеличение этого значения заставляет функцию выполнять дополнительные расчеты, который увеличивает вероятность нахождения большего количества inliers.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Максимальное расстояние от точки до проекции соответствующей точки в виде разделенной запятой пары, состоящей из 'MaxDistance' и положительный числовой скаляр. 'MaxDistance' задает максимальное расстояние, в пикселях, что точка может отличаться от спроектированного местоположения своей соответствующей точки, которая будет рассмотрена inlier. Соответствующая проекция основана на предполагаемом преобразовании.

Функция проверяет на преобразование от matchedPoints1 к matchedPoints2, и затем вычисляет расстояние между совпадающими точками в каждой паре после применения преобразования. Если расстояние между совпадающими точками в паре больше 'MaxDistance' значение, затем пара рассматривается выбросом для того преобразования. Если расстояние меньше 'MaxDistance', затем пара рассматривается inlier.

A matched point show in image 1 and image 2. Image one shows the point from image 2 projected back onto image 1.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

свернуть все

Геометрическое преобразование, возвращенное как affine3d или rigid3d объект.

Возвращенная матрица геометрического преобразования сопоставляет inliers в matchedPoints1 к inliers в matchedPoints2. Функция возвращает объект, характерный для типа преобразования, заданного transformType входной параметр.

transformTypetform
'rigid'rigid3d
'similarity'affine3d

Код статуса, возвращенный как 0, 1, или 2. Код статуса указывает, могла ли функция оценить преобразование и, в противном случае почему это перестало работать.

ЗначениеОписание
0Никакая ошибка
1matchedPoints1 и matchedPoints2 входные параметры не содержат достаточно точек
2Недостаточно inliers найдено

Если вы не задаете status код вывел, функция возвращает ошибку, если это не может привести к результатам.

Типы данных: int32

Inliers, возвращенные как M-by-1 логический вектор из M, указывают пары. Каждый элемент содержит любого логическая истина, 1, указать на пару точки - inlier, или логическая ложь, 0, указать на пару точки - выброс.

Алгоритмы

Функция исключает выбросы с помощью демонстрационного согласия M-средства-оценки (MSAC) алгоритм. Алгоритм MSAC является вариантом согласия случайной выборки (RANSAC) алгоритм. Результаты не могут быть идентичными между запусками из-за рандомизированной природы алгоритма MSAC.

Ссылки

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

[2] Торр, P.H.S., и А. Зиссермен. “MLESAC: Новое Устойчивое Средство оценки с Приложением к Оценке Геометрии Изображений”. Компьютерное зрение и Распознавание изображений 78, № 1 (апрель 2000): 138–56. https://doi.org/10.1006/cviu.1999.0832.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2020b