pcsegdist

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

Описание

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

пример

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

[___] = pcsegdist(___,Name=Value) свойства наборов с помощью аргументов name-value. Например, метки = pcsegdist (ptCloud, minDistance, NumClusterPoints = [1, Inf]) определяет минимальный и максимальный номер точек в каждом кластере к [1,Inf].

Примеры

свернуть все

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

[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 object. The axes object 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 object. The axes object 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 object. The axes object with title Point Cloud Clusters contains an object of type scatter.

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

свернуть все

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

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

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

Аргументы name-value

Задайте дополнительные пары аргументов как Name1=Value1,...,NameN=ValueN, где Name имя аргумента и Value соответствующее значение. Аргументы name-value должны появиться после других аргументов, но порядок пар не имеет значения.

Пример: ParallelNeighborSearch=false устанавливает ParallelNeighborSearch к false.

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

Параллельный соседний поиск, чтобы сегментировать данные об облаке точек в виде true или false. Установите это свойство на true когда вы ожидаете там быть приблизительно 50 кластерами или больше меньше чем с 100 точками на кластер.

Параллельный соседний поиск может улучшить скорость сегментации для некоторых наборов данных. Улучшенная скорость зависит от набора данных и значения minDistance входной параметр.

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

свернуть все

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

  • Если облако точек, 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