pcregistericp

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

Описание

пример

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

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

Нормали облака точек требуются алгоритмом регистрации, когда вы выбираете 'pointToPlane' метрический. Поэтому, если входное облако точек Normal свойство пустое, функция заполняет его. Когда функция заполняет Normal свойство, оно использует 6 точек, чтобы соответствовать локальной плоскости. Шесть точек могут не сработать при любых обстоятельствах. Если регистрация в 'pointToPlane' metric fails, рассмотрите вызов 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');

Figure contains an axes. The axes with title Teapot contains an object of type scatter.

Создайте объект преобразования с поворотом на 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');

Figure contains an axes. The axes with title Transformed Teapot contains an object of type scatter.

Применить жесткую регистрацию.

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

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

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

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

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

МетрикаМетод Moving PointCloud DownsampleМетод Fixed Облака точек Downsample
'pointToPoint''random''random'
'gridAverage''gridAverage'
'pointToPlane''gridAverage''gridAverage'
'random''nonuniformGridSample'

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

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

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

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

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

The rigid3d объект содержит перемещение, которое перемещает центр движущееся облако точек к центру фиксированного облака точек.

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

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

свернуть все

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

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

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

Алгоритмы

свернуть все

Совет

  • Для наземных облаков точек автомобиля можно улучшить эффективность и точность, удалив землю используя pcfitplane или segmentGroundFromLidarData перед регистрацией. Для получения дополнительной информации о том, как это сделать, смотрите функцию helper, helperProcessPointCloud в примере Build a Map from Lidar Data (Automated Driving Toolbox).

  • Чтобы объединить более двух облаков точек, можно использовать pccat функцию вместо функции pcmerge функция.

Вопросы совместимости

расширить все

Поведение изменено в R2020a

Ссылки

[1] Chen, Y. and G. Medioni. Моделирование объекта путем регистрации изображений нескольких областей значений. Image Vision Computing. Баттерворт-Хайнеман. Том 10, выпуск 3, апрель 1992 года, стр. 145-155.

[2] Besl, Paul J., N. D. McKay. «Метод регистрации 3-D фигур». Транзакции IEEE по шаблонному анализу и машинному анализу. Los Alamitos, CA: IEEE Computer Society. Том 14, Выпуск 2, 1992, стр. 239-256.

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