pcregisterndt

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

Описание

пример

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

Регистрационный алгоритм основан [1]на [2] алгоритма нормальных распределений преобразовывают (NDT). Лучшая эффективность этого итеративного процесса требует настраивающих свойств для ваших данных. Чтобы улучшить точность и КПД регистрации, рассмотрите субдискретизацию облаков точек при помощи 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);

Voxelize облако точек в кубы sidelength 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 куба, что voxelizes облако фиксированной точки в виде положительной скалярной величины.

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

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

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

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

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

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

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

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

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

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

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

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

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

Типы данных: логический

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

свернуть все

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

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

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

Алгоритмы

свернуть все

Советы

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

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

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

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

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

Ссылки

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

[2] Магнуссон, M. “3D нормальные распределения преобразовывают — эффективное представление для регистрации, поверхностного анализа и обнаружения цикла”. Ph.D. Тезис. Университет Örebro, Örebro, Швеция, 2013.

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

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

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

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