exponenta event banner

estimateGeometricTransform3D

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

Описание

пример

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

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

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

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

Извлеките внутренние точки.

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

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

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 устанавливает доверительное значение для нахождения максимального количества входов в 99.

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

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

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

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

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

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

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 к входам в matchedPoints2. Функция возвращает объект, специфичный для типа преобразования, указанного transformType входной аргумент.

transformTypetform
'rigid'rigid3d
'similarity'affine3d

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

СтоимостьОписание
0Без ошибок
1matchedPoints1 и matchedPoints2 входные данные не содержат достаточного количества точек
2Найдено недостаточно вложенных файлов

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

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

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

Алгоритмы

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

Ссылки

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

[2] Торр, П.Х.С. и А. Зиссерман. «MLESAC: новый надежный оценщик с приложением к оценке геометрии изображения». Компьютерное видение и понимание изображений 78, № 1 (апрель 2000 года): 138-56. https://doi.org/10.1006/cviu.1999.0832.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2020b