exponenta event banner

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

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

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

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

  • Пурпурное - перемещение облака точек

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

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

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

  • Желтый - линия, соединяющая соответствующие элементы