exponenta event banner

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;

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

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