Main Content

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

pcfitplane

3 次元点群への平面の近似

説明

model = pcfitplane(ptCloudIn,maxDistance) は、インライア点から平面までの最大許容距離が指定されている点群に平面を近似します。この関数は、平面を表す幾何学的モデルを返します。

この関数は、M-estimator SAmple Consensus (MSAC) アルゴリズムを使用して平面を検出します。MSAC アルゴリズムは、RANdom SAmple Consensus (RANSAC) アルゴリズムのバリアントです。

model = pcfitplane(ptCloudIn,maxDistance,referenceVector) は、1 行 3 列の referenceVector 入力によって追加の方向の制約が指定されている点群に平面を近似します。

model = pcfitplane(ptCloudIn,maxDistance,referenceVector,maxAngularDistance) は、最大角距離が指定されている点群に平面を近似します。

[model,inlierIndices,outlierIndices] = pcfitplane(ptCloudIn,maxDistance) は、点群入力のインライア点と外れ値点の線形インデックスを追加で返します。

[___,meanError] = pcfitplane(ptCloudIn,maxDistance) は、前述の構文のいずれかを使用し、インライア点からモデルまでの距離の平均誤差を追加で返します。

[___] = pcfitplane(ptCloudIn,maxDistance,Name,Value) は、1 つ以上の Name,Value ペアの引数によって指定された追加オプションを使用します。

すべて折りたたむ

点群を読み込みます。

load('object3d.mat')

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

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

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

平面近似用に点から平面までの最大距離 (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 contains an axes. The axes with title First Plane contains an object of type scatter.

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

Figure contains an axes. The axes with title Second Plane contains an object of type scatter.

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

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

入力引数

すべて折りたたむ

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

インライア点から平面までの最大距離。スカラー値として指定します。点群に使用している単位と一致する単位で距離を指定します。

データ型: single | double

基準となる方向の制約。1 行 3 列のベクトルで指定します。

データ型: single | double

近似される平面の法線ベクトルと基準方向の間の最大絶対角距離。角度のスカラー値として指定します。

データ型: single | double

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'SampleIndices',[].

入力点群でサンプリングする点の線形インデックス。'SampleIndices' と列ベクトルで構成されるコンマ区切りのペアとして指定します。空ベクトルの場合は、平面を近似する RANSAC 反復ですべての点がサンプリングの候補になります。サブセットを指定すると、モデルを近似するためにサブセット内の点のみがサンプリングされます。

点のサブセットを指定すると、プロセスを大幅に高速化し、試行回数を減らすことができます。pointCloud オブジェクトの findPointsInROI メソッドを使用してインデックス ベクトルを生成できます。

インライアを検出するためのランダム試行の最大回数。'MaxNumTrials' と正の整数で構成されるコンマ区切りのペアとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

最大数のインライアの検出に関する信頼度のパーセント比。'Confidence' と [0 100] の範囲の数値スカラーで構成されるコンマ区切りのペアとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

出力引数

すべて折りたたむ

平面の幾何学的モデル。planeModel オブジェクトとして返されます。

入力点群に有効な点が十分に含まれていない場合や、関数で十分なインライア点を検出できない場合は、出力モデルの係数がゼロに設定されます。

入力点群内のインライア点の線形インデックス。列ベクトルとして返されます。

入力点群内の外れ値点の線形インデックス。列ベクトルとして返されます。

インライア点からモデルまでの距離の平均誤差。スカラー値として返されます。

参照

[1] Torr, P. H. S., and A. Zisserman. “MLESAC: A New Robust Estimator with Application to Estimating Image Geometry.” Computer Vision and Image Understanding. 2000.

拡張機能

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

R2015b で導入