pcregisterndt

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

Синтаксис

tform = pcregisterndt(moving,fixed,gridStep)
[tform,movingReg] = pcregisterndt(moving,fixed,gridStep)
[___,rmse] = pcregisterndt(moving,fixed,gridStep)
[___] = pcregisterndt(moving,fixed,gridStep,Name,Value)

Описание

пример

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')

Чтобы повысить эффективность и точность регистрационного алгоритма 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')

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

свернуть все

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

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

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

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

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

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

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

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

Ожидаемый процент выбросов относительно нормального распределения, заданного как пара, разделенная запятой, состоящая из '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 отображать информацию о прогрессе.

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

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

свернуть все

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

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

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

Ссылки

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

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

Введенный в R2018a

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