exponenta event banner

pcregistercorr

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

Описание

пример

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

Функция выполняет регистрацию, сначала преобразуя оба облака точек в 2-D сетку занятости в плоскости X-Y с центром в начале координат (0,0,0). Заполняемость каждой ячейки сетки определяется с использованием значений координат Z точек в сетке.

[tform,rmse] = pcregistercorr(___) дополнительно возвращает среднеквадратическую ошибку евклидова расстояния между зарегистрированными облаками точек.

[___,peak] = pcregistercorr(___) дополнительно возвращает пиковое значение корреляции разности фаз между двумя сетками занятости.

[___] = pcregistercorr(___,Name,Value) указывает параметры, использующие один или несколько аргументов «имя-значение» в дополнение к входным аргументам в предыдущих синтаксисах. Например, 'Window',false устанавливает Window аргумент «имя-значение» для false .

Примеры

свернуть все

Считывание данных из файла захвата пакетов Velodine (PCAP) в рабочую область.

veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');

Считывание фиксированного и движущегося облака точек из кадров данных лидара.

frameNumber = 1;
skipFrame   = 5;
fixed  = readFrame(veloReader,frameNumber);
moving = readFrame(veloReader,frameNumber + skipFrame);
 

Найдите плоскости основания для движущихся и фиксированных облаков точек. Установите максимальное расстояние в метрах.

maxDistance = 0.4;
referenceVector = [0 0 1];

groundMoving = pcfitplane(moving,maxDistance,referenceVector);
groundFixed = pcfitplane(fixed,maxDistance,referenceVector);
 

Преобразуйте облака точек таким образом, чтобы их плоскости основания были параллельны плоскости X-Y.

tformMoving = normalRotation(groundMoving,referenceVector);
tformFixed = normalRotation(groundFixed,referenceVector);

movingCorrected = pctransform(moving,tformMoving);
fixedCorrected = pctransform(fixed,tformFixed);
 

Зарегистрируйте движущееся облако точек относительно фиксированного облака точек. Установите размер сетки занятости 100 на 100 метров и размер каждой ячейки сетки 0,5 на 0,5 метра.

gridSize = 100;
gridStep = 0.5;

tform = pcregistercorr(movingCorrected,fixedCorrected,gridSize,gridStep);
 

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

combinedTform = rigid3d(tform.T * tformMoving.T * tformFixed.T);
movingReg = pctransform(moving,combinedTform);
 

Визуализация регистрации.

figure
subplot(121)
pcshowpair(moving,fixed)
title('Before Registration')
view(2)

subplot(122)
pcshowpair(movingReg,fixed)
title('After Registration')
view(2)

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

свернуть все

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

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

Размер квадратной сетки заполняемости, определяемый как скалярное значение в мировых единицах измерения. Ширина и высота сетки занятости равны этому значению. Центр находится в начале координат (0, 0, 0).

Размер каждой ячейки сетки, заданный как скалярное значение в мировых единицах.

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

Пример: 'zlim',[0 3] устанавливает нижний предел оси Z равным 0 и верхний предел до 3.

Предел по оси Z для вычисления заполняемости ячейки сетки, заданной как вектор вида [zmin zmax], где zmin и zmax - числовые скаляры. Функция масштабирует точки со значением оси Z от zmin до zmax до вероятностей в диапазоне [0, 1]. Значениям менее zmin присваивается значение занятости, равное 0. Значениям, превышающим zmax, присваивается значение занятости, равное 1.

Логично указать, следует ли использовать функцию окна для подавления спектральных эффектов утечки в частотной области. При установке Window кому true, функция использует окно Блэкмана для повышения стабильности результатов регистрации. Если общие элементы, которые будут выровнены в сетках занятости, ориентированы вдоль краев, то установка Window кому false может обеспечить превосходные результаты регистрации.

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

свернуть все

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

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

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

Совет

  • Метод фазовой корреляции лучше всего использовать для регистрации точечных облаков, когда преобразование может быть описано перемещением в плоскости X-Y и вращением вокруг оси Z. Например, наземное транспортное средство с горизонтально установленным лидаром, движущимся по плоской поверхности.

  • Алгоритм фазовой корреляции ожидает, что движение будет исключительно вдоль плоскости X-Y, как в случае с нулевой плоскостью. Если движение не находится точно в плоскости X-Y, можно использовать normalRotation для преобразования облаков точек. Например, при движении транспортного средства можно уменьшить влияние подвески транспортного средства или элементов поверхности, таких как выбоины и удары скорости, с помощью normalRotation функция.

  • Увеличение размера сетки занятости увеличивает вычислительные требования этой функции. Можно управлять размером сетки занятости, изменив gridSize и gridStep аргументы.

  • Если вы получите плохие результаты регистрации и peak корреляционное значение меньше 0.03, попробуйте установить Window аргумент для false.

Ссылки

[1] Димитриевский, Мартин, Дэвид Ван Хамм, Питер Веелаерт и Вильфрид Филипс. «Надежное сопоставление карт занятости для одометрии в автономных транспортных средствах». В трудах 11-й Совместной конференции по компьютерному зрению, визуализации и теории и приложениям компьютерной графики, 626-33. Рим, Италия: SCITEPRESS - Научно-технические публикации, 2016.

Представлен в R2020b