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 object. The axes object 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 object. The axes object contains 2 objects of type scatter.

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

свернуть все

Движущееся облако точек в виде pointCloud объект.

Облако фиксированной точки в виде pointCloud объект.

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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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 функция.

Регистрационный обзор NDT

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

Чтобы указать два облака точек, движущееся облако точек и облако фиксированной точки, с помощью подхода NDT, алгоритм выполняет следующее:

  1. Вычисляет нормальные распределения для облака фиксированной точки путем деления области, покрытой сканом облака точек в 3-D поля постоянного размера, называемого "вокселями". Каждый воксель содержит набор точек. Алгоритм вычисляет среднюю и ковариационную матрицу для точек в каждом вокселе.

  2. Начиная с исходного предположения преобразования алгоритм выравнивает движущееся облако точек к облаку фиксированной точки. Это затем находит, что сумма статистической вероятности каждой выровненной точки расположена в вокселе, который окружает точку (в движущемся облаке точек), на основе нормального распределения облака фиксированной точки.

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

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

  5. Алгоритм остановки однажды максимальные итерации или параметры допуска, соответствуются. Допуск является мерой того, сколько угловые и поступательные оценки изменяют от одной итерации до другого.

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

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

Поведение изменяется в 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