В этом примере показано, как соотносить элементы между облаками точек с помощью 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);Если нет соответствующих данных облака точек, можно использовать два набора элементов самостоятельно. 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')

Соответствующие элементы и облака точек кодируются цветом для улучшения визуализации:
Пурпурное - перемещение облака точек
Зеленый - фиксированное облако точек
Красный круг - совпадающие точки в облаке движущихся точек
Синяя звездочка - совпадающие точки в облаке фиксированных точек
Желтый - линия, соединяющая соответствующие элементы