exponenta event banner

pcregistericp

Регистрация двух точечных облаков по алгоритму ICP

Описание

пример

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');

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Кому 'pointToPlane' может уменьшить число итераций для обработки. Однако эта метрика требует дополнительных алгоритмических шагов в каждой итерации. 'pointToPlane' метрика улучшает регистрацию плоских поверхностей.

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

МетрикаМетод Downsample для движущейся облачной средыМетод понижающей выборки облака фиксированных точек
'pointToPoint''random''random'
'gridAverage''gridAverage'
'pointToPlane''gridAverage''gridAverage'
'random''nonuniformGridSample'

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Алгоритмы

свернуть все

Совет

  • Для точечных облаков наземного транспортного средства можно повысить производительность и точность, удалив грунт с помощью pcfitplane или segmentGroundFromLidarData до регистрации. Для получения подробной информации о том, как это сделать, см. функцию помощника, helperProcessPointCloud в примере Создать карту из данных Лидара (Автоматизированная панель инструментов вождения).

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

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

развернуть все

В R2020a изменилось поведение

Ссылки

[1] Чен, Я. и Г. Медиони. «Моделирование объектов путем регистрации изображений нескольких диапазонов». Обработка изображений Vision. Баттерворт-Хайнеманн. Том 10, выпуск 3, апрель 1992 года, стр. 145-155.

[2] Бесл, Пол Дж., Н. Д. МакКей. «Метод регистрации фигур 3-D». Транзакции IEEE по анализу шаблонов и машинному интеллекту. Лос-Аламитос, Калифорния: Компьютерное общество IEEE. Том 14, выпуск 2, 1992, стр. 239-256.

Представлен в R2018a