pcregistercorr

Укажите две корреляции фазы использования облаков точек

Описание

пример

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

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

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

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

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

Примеры

свернуть все

Считайте данные из пакетного получения Velodyne (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).

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

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

Пример: '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