Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

pcsegdist

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

説明

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

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

[___] = pcsegdist(___,Name=Value) は、名前と値の引数を使用してプロパティを設定します。たとえば、labels = pcsegdist(ptCloud,minDistance,NumClusterPoints=[1,Inf]) は、各クラスターの点の最小数と最大数を [1,Inf] に設定します。

すべて折りたたむ

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

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

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

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.

オーガナイズド LiDAR 点群をワークスペースに読み込みます。

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

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

データ型: single | double

名前と値の引数

例: ParallelNeighborSearch=false は、ParallelNeighborSearchfalse に設定します。

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

各クラスターの点の最小数と最大数。スカラーまたは [minPoints,maxPoints] の形式の 2 要素ベクトルとして指定します。NumClusterPoints をスカラーとして指定した場合、クラスター内の点の最大数は無制限になります。クラスターが指定された範囲の外にある場合、関数は labels0 に設定します。

点群データをセグメント化するための並列近傍探索。true または false として指定します。クラスター 1 個あたりの点が 100 個未満で、クラスターが約 50 個以上になる可能性があるときは、このプロパティを true に設定します。

一部のデータセットでは、並列近傍探索によってセグメンテーション速度が向上します。どれだけ速度が向上するかは、データセットと minDistance 入力の値によって異なります。

出力引数

すべて折りたたむ

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

  • 点群 ptCloud が点の位置をアンオーガナイズドの M 行 3 列の行列として格納している場合、labels は M 行 1 列のベクトルです。

  • 点群 ptCloud が点の位置をオーガナイズドの M×N×3 の行列として格納している場合、labels は M 行 N 列の行列です。

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

データ型: uint32

クラスターの数。正の整数として返されます。クラスターの数は、無効な点のために予約されているラベル値 0 が除外されます。この関数は、ptCloud オブジェクトの Location プロパティの値が single の場合、numClusterssingle データ型として返します。それ以外の場合、関数は double データ型として値を返します。

データ型: single | double

拡張機能

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

バージョン履歴

R2018a で導入

参考

オブジェクト

関数