Соответствие и визуализация соответствующих функций в облаках точек

В этом примере показано, как соответствующие функции между облаками точек с помощью pcmatchfeatures функционировать и визуализировать их используя pcshowMatchedFeatures функция.

Создайте velodyneFileReader объект.

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

Считайте две облака точек из velodyneFileReader объект в рабочую область.

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

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

groundPtsIdxFixed = segmentGroundSMRF(fixed);
groundPtsIdxMoving = segmentGroundSMRF(moving);
fixedSeg = select(fixed,~groundPtsIdxFixed,'OutputSize','full');
movingSeg = select(moving,~groundPtsIdxMoving,'OutputSize','full');
figure
pcshowpair(movingSeg,fixedSeg)
ylim([-50 60])
title('Input Point Clouds')

Figure contains an axes. The axes with title Input Point Clouds contains 2 objects of type scatter.

Наложенные входы облаков точек закодированы по цвету:

  • Пурпурное - Движущееся облако точек

  • Зеленый - Фиксированное облако точек

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

fixedDownsampled = pcdownsample(fixedSeg,'gridAverage',0.2);
movingDownsampled = pcdownsample(movingSeg,'gridAverage',0.2);

Извлечение функций из облаков точек с помощью extractFPFHFeatures функция. Функции возвращают допустимые индексы в обоих облаках точек. Выберите допустимые точки и создайте новые облака опорных точек.

[fixedFeature,fixedValidInds] = extractFPFHFeatures(fixedDownsampled);
[movingFeature,movingValidInds] = extractFPFHFeatures(movingDownsampled);
fixedValidPts = select(fixedDownsampled,fixedValidInds);
movingValidPts = select(movingDownsampled,movingValidInds);

Сопоставление функций между облаками точек с помощью извлечённых функций и облаков опорных точек.

indexPairs = pcmatchfeatures(movingFeature,fixedFeature,movingValidPts, ...
    fixedValidPts);

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

Создайте облака точек только для точек в каждом облаке точек с соответствующими функциями в другом облаке точек.

matchedFixedPts = select(fixedValidPts,indexPairs(:,2));
matchedMovingPts = select(movingValidPts,indexPairs(:,1));

Визуализация совпадений.

figure
pcshowMatchedFeatures(movingSeg,fixedSeg,matchedMovingPts,matchedFixedPts, ...
    'Method','montage')
xlim([-40 210])
ylim([-50 50])
title('Matched Points')

Figure contains an axes. The axes with title Matched Points contains 5 objects of type scatter, line.

Совпадающие функции и облака точек закодированы в цвете для улучшения визуализации:

  • Пурпурное - Движущееся облако точек

  • Зеленый - Фиксированное облако точек

  • Красный круг - Совпадающие точки в движущемся облаке точек

  • Голубая звездочка - Совпадающие точки в облаке фиксированных точек

  • Желтый - линия, соединяющая совпадающие функции