Main Content

pcfitsphere

3 次元点群への球の近似

説明

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

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

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

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

[___] = pcfitsphere(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、MaxNumTrials=1000 は、ランダム試行の最大回数を 1000 に設定します。

すべて折りたたむ

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

load("object3d.mat");

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

figure
pcshow(ptCloud)
xlabel("X(m)")
ylabel("Y(m)")
zlabel("Z(m)")
title("Detect a sphere in a point cloud")

球近似用に点から球までの最大距離を 1 cm に設定します。

maxDistance = 0.01;

関心領域を設定して探索範囲を制限します。

roi = [-inf,0.5;0.2,0.4;0.1,inf];
sampleIndices = findPointsInROI(ptCloud,roi);

点群内で地球儀を検出して抽出します。

[model,inlierIndices] = pcfitsphere(ptCloud,maxDistance,SampleIndices=sampleIndices);
globe = select(ptCloud,inlierIndices);

抽出された地球儀をプロットします。

figure
pcshow(globe)
title("Globe Point Cloud")

入力引数

すべて折りたたむ

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

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

データ型: single | double

名前と値の引数

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

例: MaxNumTrials=1000 は、ランダム試行の最大回数を 1000 に設定します。

入力点群でサンプリングする点の線形インデックス。列ベクトルとして指定します。空ベクトルの場合は、球を近似する RANSAC 反復ですべての点がサンプリングの候補になります。サブセットを指定すると、モデルを近似するためにサブセット内の点のみがサンプリングされます。点のサブセットを指定すると、プロセスを大幅に高速化し、試行回数を減らすことができます。pointCloud オブジェクトのオブジェクト関数 findPointsInROI を使用してインデックス ベクトルを生成できます。

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

最大数のインライアの検出に関する信頼度。割合を表す (0 100) の範囲の数値スカラーとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

出力引数

すべて折りたたむ

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

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

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

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

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

参照

[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 で導入