pcregisterndt

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

Описание

пример

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

Алгоритм регистрации основан на алгоритме преобразования нормальных распределений (NDT) [1] . Лучшая [2]эффективность этого итерационного процесса требует корректировки свойств для ваших данных. Чтобы улучшить точность и эффективность регистрации, рассмотрите понижение дискретизации облаков точек с помощью pcdownsample перед использованием pcregisterndt.

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

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

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

Примеры

свернуть все

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

ld = load('livingRoom.mat');
moving = ld.livingRoomData{1};
fixed = ld.livingRoomData{2};
pcshowpair(moving,fixed,'VerticalAxis','Y','VerticalAxisDir','Down')

Figure contains an axes. The axes contains 2 objects of type scatter.

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

movingDownsampled = pcdownsample(moving,'gridAverage',0.1);

Вокселизируйте облако точек в кубы боковой длины 0,5. Применить жесткую регистрацию с помощью алгоритма NDT.

gridStep = 0.5;
tform = pcregisterndt(movingDownsampled,fixed,gridStep);

Визуализируйте выравнивание.

movingReg = pctransform(moving,tform);
pcshowpair(movingReg,fixed,'VerticalAxis','Y','VerticalAxisDir','Down')

Figure contains an axes. The axes contains 2 objects of type scatter.

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

свернуть все

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

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

Размер куба 3-D, который вокселизирует облако фиксированных точек, заданный как положительная скалярная величина.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Алгоритмы

свернуть все

Совет

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

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

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

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

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

Ссылки

[1] Бибер, П. и У. Страсер. Преобразование нормальных распределений: новый подход к лазерному Сопоставлению сканов. Материалы Международной конференции IEEE/RSJ по интеллектуальным роботам и системам (IROS). Лас-Вегас, НВ. Том 3, ноябрь 2003 года, стр. 2743-2748.

[2] Магнуссон, М. «Трехмерное преобразование нормальных распределений - эффективное представление для регистрации, анализа поверхности и обнаружения цикла». Доктор философии. Дипломная работа. Университет Örebro, Örebro, Швеция, 2013.

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

Генерация кода GPU
Сгенерируйте код CUDA ® для графических процессоров NVIDIA ® с помощью GPU Coder™

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