pcregistericp

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

Описание

пример

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

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

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

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

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

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

Примеры

свернуть все

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

ptCloud = pcread('teapot.ply');

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

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

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

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

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

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

МетрикаПеремещение метода PointCloud DownsampleМетод Downsample облака фиксированной точки
'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 измеряет угловое различие в градусах. Алгоритм останавливается, когда средняя разница между предполагаемыми твердыми преобразованиями в трех новых последовательных итерациях падает ниже заданного значения допуска.

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

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

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

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

свернуть все

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

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

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

Алгоритмы

свернуть все

Советы

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

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

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

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

Поведение изменяется в R2020a

Ссылки

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

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

Введенный в R2018a