pcsegdist

Облако точек сегмента в кластеры на основе Евклидова расстояния

Описание

labels = pcsegdist(ptCloud,minDistance) сегментирует облако точек на кластеры, с минимальным Евклидовым расстоянием minDistance между точками от различных кластеров. pcsegdist присваивает целочисленную кластерную метку каждой точке в облаке точек и возвращает labels из всех точек.

пример

[labels,numClusters] = pcsegdist(ptCloud,minDistance) также возвращает количество кластеров.

Примеры

свернуть все

Создайте две концентрических сферы и объедините их в облако точек.

[X,Y,Z] = sphere(100);
loc1 = [X(:),Y(:),Z(:)];
loc2 = 2*loc1;
ptCloud = pointCloud([loc1;loc2]);
pcshow(ptCloud)
title('Point Cloud')

Установите минимальное Евклидово расстояние между кластерами.

minDistance = 0.5;

Сегментируйте облако точек.

[labels,numClusters] = pcsegdist(ptCloud,minDistance);

Постройте помеченные результаты. Точки сгруппированы в два кластера.

pcshow(ptCloud.Location,labels)
colormap(hsv(numClusters))
title('Point Cloud Clusters')

Загрузите организованное облако точек лидара под названием ptCloud.

load('drivingLidarPoints.mat')
pcshow(ptCloud)
title('Unclustered Point Cloud')

Обнаружьте наземную плоскость и сохраните точки в inliers. Расстояние измеряется в метрах.

maxDistance = 0.3;
referenceVector = [0,0,1];
[~,inliers,outliers] = pcfitplane(ptCloud,maxDistance,referenceVector);

Кластеризируйте точки, игнорируя наземные точки плоскости. Задайте минимальное Евклидово расстояние 0,5 метров между кластерами.

ptCloudWithoutGround = select(ptCloud,outliers,'OutputSize','full');
distThreshold = 0.5;
[labels,numClusters] = pcsegdist(ptCloudWithoutGround,distThreshold);

Добавьте дополнительную метку для наземной плоскости.

numClusters = numClusters+1;
labels(inliers) = numClusters;

Постройте помеченные результаты. Отобразите наземную плоскость черного цвета цвета.

labelColorIndex = labels+1;
pcshow(ptCloud.Location,labelColorIndex)
colormap([hsv(numClusters);[0 0 0]])
title('Point Cloud Clusters')

Входные параметры

свернуть все

Облако точек, заданное как pointCloud объект.

Минимальное Евклидово расстояние между точками от двух различных кластеров, заданных как положительная скалярная величина.

Типы данных: single | double

Выходные аргументы

свернуть все

Кластерные метки, возвращенные как одно из следующих.

  • Если облако точек, ptCloud, хранилища указывают местоположения как неорганизованный M-by-3 матрица, затем labels M-by-1 вектор.

  • Если облако точек, ptCloud, хранилища указывают местоположения как организованный M-by-N-by-3 массив, затем labels M-by-N матрица.

Каждая точка в облаке точек имеет кластерную метку, заданную соответствующим элементом в labels. Значение каждой метки является целым числом от 0 к количеству кластеров актуальных вопросов, numClusters. Значение 0 резервируется для недопустимых точек, таких как точки с Inf или NaN координаты.

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

Расширенные возможности

Смотрите также

| | |

Введенный в R2018a