pcregistercpd

Зарегистрируйте две облака точек с помощью алгоритма CPD

Описание

пример

tform = pcregistercpd(moving,fixed) возвращает преобразование, которое регистрирует движущееся облако точек с помощью фиксированного облака точек с помощью алгоритма когерентного дрейфа точек (CPD) [1].

Примечание

Рассмотрите понижение дискретизации облаков точек с помощью pcdownsample перед использованием pcregistercpd для повышения эффективности регистрации.

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

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

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

Примеры

свернуть все

Загрузите данные облака точек в рабочую область. Извлеките движущиеся облака и облака фиксированных точек из данных облака точек в рабочей области.

handData = load('hand3d.mat');
moving = handData.moving;
fixed = handData.fixed;

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

movingDownsampled = pcdownsample(moving,'gridAverage',0.03);
fixedDownsampled = pcdownsample(fixed,'gridAverage',0.03);

Отображение облаков точек с понижающей дискретизацией перед регистрацией.

figure
pcshowpair(movingDownsampled,fixedDownsampled,'MarkerSize',50)
xlabel('X')
ylabel('Y')
zlabel('Z')
title('Point clouds before registration')
legend({'Moving point cloud','Fixed point cloud'},'TextColor','w')
legend('Location','southoutside')

Figure contains an axes. The axes with title Point clouds before registration contains 2 objects of type scatter. These objects represent Moving point cloud, Fixed point cloud.

Выполните нежесткую регистрацию с помощью алгоритма CPD.

tform = pcregistercpd(movingDownsampled,fixedDownsampled);
movingReg = pctransform(movingDownsampled,tform);

Отображение облаков точек с понижающей дискретизацией после регистрации.

figure
pcshowpair(movingReg,fixedDownsampled,'MarkerSize',50)
xlabel('X')
ylabel('Y')
zlabel('Z')
title('Point clouds after registration')
legend({'Moving point cloud','Fixed point cloud'},'TextColor','w')
legend('Location','southoutside')

Figure contains an axes. The axes with title Point clouds after registration contains 2 objects of type scatter. These objects represent Moving point cloud, Fixed point cloud.

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

свернуть все

Перемещение облака точек, заданное как pointCloud объект.

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

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

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

Пример: 'MaxIterations',20 останавливает алгоритм CPD после 20 итераций.

Тип преобразования, заданный как разделенная разделенными запятой парами, состоящая из 'Transform' и 'Nonrigid', 'Rigid', или 'Affine' векторы символов или строковые скаляры.

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

Ожидаемый процент выбросов относительно нормального распределения, заданный как разделенная разделенными запятой парами, состоящая из 'OutlierRatio' и скаляром в области значений [0, 1). Увеличение этого значения уменьшает влияние выбросов и шума.

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

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

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

Допуск между последовательными итерациями CPD, заданный как разделенная разделенными запятой парами, состоящая из 'Tolerance' и скаляром. Алгоритм останавливается, когда абсолютное процентное изменение значений функции журнала правдоподобия, измеренной между последовательными итерациями, достигает или падает ниже заданного значения допуска. Уменьшение этого значения увеличивает вероятность лучшего выравнивания.

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

Взаимодействие между точками, заданное как разделенная разделенными запятой парами, состоящая из 'InteractionSigma' и положительная скалярная величина, который представляет стандартное отклонение Гауссова фильтра. Типичные значения находятся в области значений [1.5,3]. Увеличение этого значения увеличивает взаимодействие между точками в облаке точек. В результате можно наблюдать когерентное движение в облаке точек и каждая точка подвергается одному и тому же перемещению. Кроме того, уменьшение этого значения уменьшает взаимодействие между точками в облаке точек. В результате можно наблюдать локализованное перемещение точек, и выходное поле смещения показывает локализованную деформацию.

Примечание

Чтобы использовать эту пару "имя-значение", 'Transform' должен быть 'Nonrigid'.

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

Сглаживающий вес движения, заданный как разделенная разделенными запятой парами, состоящая из 'SmoothingWeight' и положительная скалярная величина. Типичные значения находятся в области значений [0.1,10]. Увеличьте это значение, чтобы создать более когерентное движение в выходном поле перемещения.

Примечание

Чтобы использовать эту пару "имя-значение", 'Transform' должен быть 'Nonrigid'.

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

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

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

Примечание

Оба 'MaxIterations' и 'Tolerance' используются как критерий остановки. Алгоритм останавливается, когда он удовлетворяет любому из условий остановки, то есть когда количество итераций достигает MaxIterations или абсолютное процентное изменение в функции журнала правдоподобия меньше или равно Tolerance.

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

свернуть все

Преобразование, возвращенное как rigid3d, affine3d объект или поле переноса. tform является 3-D преобразованием, которое регистрирует движущееся облако точек, moving к фиксированному облаку точек, fixed. Тип выхода зависит от значения Transform свойство.

Transform Значение свойстваtform
'Rigid'rigid3d объект
'Affine'affine3d объект
'Nonrigid'Поле переноса, числовая матрица того же размера и типа данных, что и Location свойство объекта движущегося облака точек, moving.

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

Корневая средняя квадратная ошибка, возвращенная как положительное вещественное число. rmse - евклидово расстояние между выровненными облаками точек.

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

Алгоритмы

Ссылки

[1] Мыроненко, А., и X. Сонг. "Регистрация набора точек: когерентный дрейф точек. "Труды по транзакциям IEEE по шаблонному анализу и машинной разведке (TPAMI). Том 32, № 12, декабрь 2010, стр. 2262-2275.

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

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