В этом примере показано, как соответствующие функции между облаками точек с помощью 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')
Наложенные входы облаков точек закодированы по цвету:
Пурпурное - Движущееся облако точек
Зеленый - Фиксированное облако точек
Чтобы уменьшить время расчетов, уменьшите значение облака точек. Понижающая дискретизация уменьшает число точек для обработки.
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')
Совпадающие функции и облака точек закодированы в цвете для улучшения визуализации:
Пурпурное - Движущееся облако точек
Зеленый - Фиксированное облако точек
Красный круг - Совпадающие точки в движущемся облаке точек
Голубая звездочка - Совпадающие точки в облаке фиксированных точек
Желтый - линия, соединяющая совпадающие функции