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

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

Наложенные облака точки ввода являются закодированным цветом:

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

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

Downsample облака точек, чтобы уменьшать время вычисления. Субдискретизация уменьшает число точек до процесса.

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')

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

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

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

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

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

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