Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

pcsegdist

ユークリッド距離に基づいて点群をクラスターにセグメント化する

説明

labels = pcsegdist(ptCloud,minDistance) は、異なるクラスターの点の間の最小ユークリッド距離 minDistance を使用して点群をクラスターにセグメント化します。pcsegdist は点群の各点に整数クラスター ラベルを割り当て、すべての点の labels を返します。

[labels,numClusters] = pcsegdist(ptCloud,minDistance) はクラスター数も返します。

すべて折りたたむ

2 つの同心球を作成して、それらを点群に組み合わせます。

[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);

ラベル付けした結果をプロットします。点は 2 つのクラスターにグループ化されます。

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

ptCloud という名前のオーガナイズド LIDAR 点群を読み込みます。

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 オブジェクトとして指定します。

異なる 2 つのクラスターの点間の最小ユークリッド距離。正のスカラーとして指定します。

データ型: single | double

出力引数

すべて折りたたむ

クラスター ラベル。次のいずれかとして返されます。

  • 点群 ptCloud が点の位置を整理されていない M 行 3 列の行列として格納している場合、labels は M 行 1 列のベクトルです。

  • 点群 ptCloud が点の位置を整理された M x N x 3 の配列として格納している場合、labels は M 行 N 列の行列です。

点群の各点には、labels の対応する要素によって指定されたクラスター ラベルがあります。各ラベルの値は 0 から有効な点のクラスター数 numClusters までの整数です。値 0 は、座標が Inf または NaN の点など、無効な点のために予約されています。

クラスターの数。正の整数として返されます。クラスターの数は、無効な点に対応するクラスターを含みません。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

R2018a で導入