pcsegdist

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

Описание

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

пример

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

[labels,numClusters] = segmentLidarData(ptCloud,'NumClusterPoints',minmaxNCP) задает минимальное и максимальное количество точек в каждом кластере.

Примеры

свернуть все

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

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

Figure contains an axes. The axes with title Point Cloud contains an object of type scatter.

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

minDistance = 0.5;

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

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

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

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

Figure contains an axes. The axes with title Point Cloud Clusters contains an object of type scatter.

Загрузите организованное облако точек лидара в рабочей области.

ld = load('drivingLidarPoints.mat');

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

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

Удалите наземные точки плоскости.

ptCloudWithoutGround = select(ld.ptCloud,outliers);

Кластеризируйте облако точек с минимумом 10 точек на кластер.

minDistance = 2;
minPoints = 10;
[labels,numClusters] = pcsegdist(ptCloudWithoutGround,minDistance,'NumClusterPoints',minPoints);

Удалите точки со значением метки 0.

idxValidPoints = find(labels);
labelColorIndex = labels(idxValidPoints);
segmentedPtCloud = select(ptCloudWithoutGround,idxValidPoints);

Постройте помеченные результаты.

figure
colormap(hsv(numClusters))
pcshow(segmentedPtCloud.Location,labelColorIndex)
title('Point Cloud Clusters')

Figure contains an axes. The axes with title Point Cloud Clusters contains an object of type scatter.

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

свернуть все

Облако точек в виде pointCloud объект.

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

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

Минимальное и максимальное количество точек в каждом кластере в виде скаляра или вектора с 2 элементами из формы [minPoints maxPoints]. Когда вы задаете minmaxNCP как скалярное значение, функция не ограничивает максимальное количество точек в каждом кластере. Функция присваивает значение метки 0 для кластеров, которые, как находят, находились вне заданной области.

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

свернуть все

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

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

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

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

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

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

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

| | | |

Введенный в R2018a