メインコンテンツ

pcfitcuboid

R2026b

3 次元点群に直方体を当てはめ

説明

model = pcfitcuboid(ptCloud) は、入力点群データに直方体を当てはめます。関数は直方体のプロパティを cuboidModel オブジェクト model に格納します。

model = pcfitcuboid(ptCloud,indices) は、入力点群の選択された点集合 indices に直方体を当てはめます。

例

例

すべて折りたたむ

点群データをワークスペースに読み込みます。

ptCloud = load("drivingLidarPoints.mat").ptCloud;

直方体の当てはめを行う関心領域を選択します。

roi = [-10 10 -6 8 -2 2];
idx = findPointsInROI(ptCloud,roi);
ptCloudROI = select(ptCloud,idx);

トリミングされた点群を可視化します。

figure
pcshow(ptCloudROI)
title("Cropped Point Cloud")

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

地面をセグメント化します。

maxDistance = 0.5;
[~,idxGround,idxNoGround] = pcfitplane(ptCloudROI,maxDistance);
groundPtCloud = select(ptCloudROI,idxGround);
ptCloudNoGround = select(ptCloudROI,idxNoGround);

セグメント化された地面を可視化します。

figure
pcshowpair(groundPtCloud,ptCloudNoGround)
legend("Ground Point Cloud","Non-Ground Point Cloud")
title("Segmented Ground Plane")

Figure contains an axes object. The axes object with title Segmented Ground Plane contains 2 objects of type scatter. These objects represent Ground Point Cloud, Non-Ground Point Cloud.

地面以外の点群をクラスターにセグメント化します。

minDistance = 1;
[labels,numClusters] = pcsegdist(ptCloudNoGround,minDistance);

点群と各クラスターを異なる色で可視化します。

figure
pcshow(ptCloudROI)
hold on
pcshow(ptCloudNoGround.Location,labels)

直方体を各クラスターに当てはめ、各クラスターとそれに当てはめた各直方体を可視化します。

for i = 1:numClusters
    idx = find(labels == i);
    model = pcfitcuboid(ptCloudNoGround,idx);
    plot(model)
end
title("Clustered Point Cloud with Fitted Cuboids")

Figure contains an axes object. The axes object with title Clustered Point Cloud with Fitted Cuboids contains 5 objects of type scatter, patch.

入力引数

すべて折りたたむ

点群。pointCloud オブジェクトとして指定します。

選択された点のインデックス。正の整数のベクトルとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

直方体モデル。cuboidModel オブジェクトとして返されます。入力点群に含まれる点が 4 未満の場合、この関数は空の直方体モデルを返します。これは、凸包ベースのアプローチを使用して直方体を当てはめるには少なくとも 4 つの点が必要であるためです。

アルゴリズム

このアルゴリズムは、入力点群内の点の凸包を使用して有向境界直方体を計算します。このアルゴリズムは次のステップを実行します。

  1. 3 次元の点の凸包を計算します。

  2. 凸包の各面について、1 つの面が凸包の面と同一平面上にある直方体の候補を計算します。

  3. 体積が最も小さい直方体の候補を選択します。

凸包に含まれる面の数が少ない場合、体積が真に最も小さい直方体の向きが、凸包のどの面にも沿わない可能性があります。このアルゴリズムは凸包の面から導出される向きのみを考慮するため、準最適な境界直方体を返すことがあります。たとえば、同一平面上にない 4 つの点によって面が 4 つしかない四面体の凸包が形成され、最適な直方体の向きが、それらのどの面にも沿わない可能性があります。

バージョン履歴

R2020b で導入

すべて展開する