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(___) は、点群入力のインライア点と外れ値点の線形インデックスを追加で返します。

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

[___] = pcfitplane(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、pcfitplane(ptCloud,maxDistance,referenceVector,maxAngularDistance,Confidence=95) は、インライアの最大数を見つけるための信頼度を 95 に設定します。

すべて折りたたむ

点群を読み込みます。

load("object3d.mat")

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

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")

入力引数

すべて折りたたむ

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

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

データ型: single | double

基準となる方向の制約。1 行 3 列のベクトルで指定します。平面を近似する方向の制約を入力点群に適用するには、関数にこの引数を指定しなければなりません。基準ベクトルを指定しない場合、関数は平面方程式 ax + by + cz + d = 0 を使用してモデルを当てはめます。

データ型: single | double

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

データ型: single | double

名前と値の引数

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

例: pcfitplane(ptCloud,maxDistance,referenceVector,maxAngularDistance,Confidence=95) は、インライアの最大数を見つけるための信頼度を 95 に設定します。

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

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

インライアを検出するためのランダム試行の最大回数。正の整数として指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

最大数のインライアの検出に関する信頼度。(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 で導入