最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

点群からの複数の平面の検出

点群を読み込みます。

load('object3d.mat')

点群を表示しラベルを付けます。

figure
pcshow(ptCloud)
xlabel('X(m)')
ylabel('Y(m)')
zlabel('Z(m)')
title('Original Point Cloud')

平面近似用に点から平面までの最大距離 (2 cm) を設定します。

maxDistance = 0.02;

平面の法線ベクトルを設定します。

referenceVector = [0,0,1];

最大角距離を 5 度に設定します。

maxAngularDistance = 5;

最初の平面であるテーブルを検出して、点群から抽出します。

[model1,inlierIndices,outlierIndices] = pcfitplane(ptCloud,...
            maxDistance,referenceVector,maxAngularDistance);
plane1 = select(ptCloud,inlierIndices);
remainPtCloud = select(ptCloud,outlierIndices);

関心領域を設定して 2 番目の平面である左の壁の探索範囲を制限します。

roi = [-inf,inf;0.4,inf;-inf,inf];
sampleIndices = findPointsInROI(remainPtCloud,roi);

残りの点群から左の壁を検出して抽出します。

[model2,inlierIndices,outlierIndices] = pcfitplane(remainPtCloud,...
            maxDistance,'SampleIndices',sampleIndices);
plane2 = select(remainPtCloud,inlierIndices);
remainPtCloud = select(remainPtCloud,outlierIndices);

2 つの平面と残りの点をプロットします。

figure
pcshow(plane1)
title('First Plane')

figure
pcshow(plane2)
title('Second Plane')

figure
pcshow(remainPtCloud)
title('Remaining Point Cloud')