exponenta event banner

pcregisterndt

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

Описание

пример

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.

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

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

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

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 останавливает алгоритм неразрушающего контроля после 20 итераций.

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Алгоритмы

свернуть все

Совет

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

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

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

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

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

Ссылки

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

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

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

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