pcregistericp

Укажите два облака точек с помощью алгоритма ICP

Синтаксис

tform = pcregistericp(moving,fixed)
[tform,movingReg] = pcregistericp(moving,fixed)
[___,rmse] = pcregistericp(moving,fixed)
[___] = pcregistericp(moving,fixed,Name,Value)

Описание

пример

tform = pcregistericp(moving,fixed) возвращает твердое преобразование, которое указывает движущееся облако точек к облаку фиксированной точки.

Регистрационный алгоритм основан на "итеративной самой близкой точке" (ICP) алгоритм. Лучшая производительность этого итеративного процесса требует настраивающих свойств для ваших данных. Рассмотрите облака точек субдискретизации с помощью pcdownsample перед использованием pcregistericp, чтобы улучшить точность и эффективность регистрации.

Нормали облака точек требуются регистрационным алгоритмом, когда вы выбираете метрику 'pointToPlane'. Поэтому, если свойство Normal облака точки ввода пусто, функция заполняет его. Когда функция заполняет свойство Normal, она использует 6 точек, чтобы соответствовать локальной плоскости. Шесть точек не могут работать при всех обстоятельствах. Если регистрация с метрическими сбоями 'pointToPlane', рассмотрите вызывание функции pcnormals, которая позволяет вам выбирать число точек, чтобы использовать.

[tform,movingReg] = pcregistericp(moving,fixed) дополнительно возвращает преобразованное облако точек, которое выравнивается с облаком фиксированной точки.

[___,rmse] = pcregistericp(moving,fixed) дополнительно возвращает среднеквадратическую ошибку Евклидова расстояния между выровненными облаками точек, с помощью любого из предыдущих синтаксисов.

[___] = pcregistericp(moving,fixed,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value.

Примеры

свернуть все

Загрузите данные об облаке точек.

ptCloud = pcread('teapot.ply');

pcshow(ptCloud); 
title('Teapot');

Создайте объект преобразования с 30 вращениями степени вдоль z - ось и перевод [5,5,10].

A = [cos(pi/6) sin(pi/6) 0 0; ...
    -sin(pi/6) cos(pi/6) 0 0; ...
            0         0  1 0; ...
            5         5 10 1];
tform1 = affine3d(A);

Преобразуйте облако точек.

ptCloudTformed = pctransform(ptCloud,tform1);

pcshow(ptCloudTformed);
title('Transformed Teapot');

Примените твердую регистрацию.

tform = pcregistericp(ptCloudTformed,ptCloud,'Extrapolate',true);

Сравните результат с истинным преобразованием.

disp(tform1.T);
    0.8660    0.5000         0         0
   -0.5000    0.8660         0         0
         0         0    1.0000         0
    5.0000    5.0000   10.0000    1.0000
tform2 = invert(tform);
disp(tform2.T);
    0.8660    0.5000    0.0000         0
   -0.5000    0.8660    0.0000         0
    0.0000   -0.0000    1.0000         0
    5.0000    5.0000   10.0000    1.0000

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

свернуть все

Движущееся облако точек, заданное как объект pointCloud.

Облако фиксированной точки, заданное как объект pointCloud.

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

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

Пример: 'Metric', 'pointToPoint' устанавливает метрику для алгоритма ICP к вектору символов 'pointToPoint'.

Метрика минимизации, заданная как пара, разделенная запятой, состоящая из 'Metric' и 'pointToPoint' или вектора символов 'pointToPlane'. Твердое преобразование между перемещением и облаками фиксированной точки оценивается алгоритмом итеративной самой близкой точки (ICP). Алгоритм ICP минимизирует расстояние между этими двумя облаками точек согласно данной метрике.

Установка 'Metric' к 'pointToPlane' может сократить количество итераций к процессу. Однако эта метрика требует дополнительных алгоритмических шагов в каждой итерации. Метрика 'pointToPlane' улучшает регистрацию плоских поверхностей.

Субдискретизируйте выбор метода:
Субдискретизируйте облака точек с помощью функции pcdownsample. Используйте любого вход 'random' или 'gridAverage' для функции pcdownsample согласно приведенной ниже таблице Metric.

МетрикаПеремещение PointCloud субдискретизирует методОблако фиксированной точки субдискретизирует метод
'pointToPoint''random''random'
'gridAverage''gridAverage'
'pointToPlane''gridAverage''gridAverage'
'random''nonuniformGridSample'

Экстраполяция, заданная как пара, разделенная запятой, состоящая из 'Extrapolate' и булева true или false. Когда вы устанавливаете это свойство на true, функция добавляет шаг экстраполяции, который прослеживает путь в регистрационном пространстве состояний, которое описано в [2]. Установка этого свойства к true может сократить количество итераций, чтобы сходиться.

Процент inliers, заданного как пара, разделенная запятой, состоящая из 'InlierRatio' и скалярного значения. Используйте это значение, чтобы установить процент совпадающих пар как inliers. Пара совпадающих точек рассматривается inlier, если его Евклидово расстояние находится в пределах набора процента соответствия с расстояниями. По умолчанию все пары соответствия используются.

Максимальное количество итераций, заданных как пара, разделенная запятой, состоящая из 'MaxIterations' и положительного целого числа. Это значение задает максимальное количество итераций, прежде чем ICP остановится.

Допуск между последовательными итерациями ICP, заданными как пара, разделенная запятой, состоящая из 'Tolerance' и вектора с 2 элементами. Вектор с 2 элементами, [Tdiff, Rdiff], представляет допуск абсолютной разности в переводе и вращении, оцененном в последовательных итерациях ICP. Tdiff измеряет Евклидово расстояние между двумя векторами сдвига. Rdiff измеряет угловое различие в градусах. Алгоритм останавливается, когда средняя разница между предполагаемыми твердыми преобразованиями в трех новых последовательных итерациях падает ниже заданного значения допуска.

Начальное твердое преобразование, заданное как пара, разделенная запятой, состоящая из 'InitialTransform' и объекта affine3d. Начальное твердое преобразование полезно, когда вы обеспечиваете внешнюю крупную оценку.

Отобразите информацию прогресса, указанную как пара, разделенная запятой, состоящая из 'Verbose' и логического скаляра. Установите Verbose на true отображать информацию о прогрессе.

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

свернуть все

Твердое преобразование, возвращенное как объект affine3d. Твердое преобразование указывает движущееся облако точек к облаку фиксированной точки. Объект affine3d описывает твердое 3-D преобразование. Алгоритм итеративной самой близкой точки (ICP) оценивает твердое преобразование между облаками фиксированной точки и перемещением.

Преобразованное облако точек, возвращенное как объект pointCloud. Преобразованное облако точек выравнивается с облаком фиксированной точки.

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

Алгоритмы

Ссылки

[1] Чен, Y. и Г. Медьони. “Объектное моделирование Регистрацией Нескольких Изображений Области значений”. Отобразите Вычисление Видения. Баттерворт-Хейнеманн. Издание 10, Выпуск 3, апрель 1992, стр 145-155.

[2] Besl, Пол Дж., Н. Д. Маккей. “Метод для Регистрации 3-D Форм”. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту. Лос-Аламитос, CA: Общество эпохи компьютеризации IEEE. Издание 14, Выпуск 2, 1992, стр 239-256.

Введенный в R2018a

Для просмотра документации необходимо авторизоваться на сайте