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

pcregistericp

ICP アルゴリズムを使用した 2 つの点群のレジストレーション

説明

tform = pcregistericp(moving,fixed) は、移動点群を固定点群にレジストレーションする剛体変換を返します。

レジストレーション アルゴリズムは "反復最近接点" (ICP) アルゴリズムに基づいています。この反復処理で最良のパフォーマンスを得るには、データのプロパティを調整しなければなりません。レジストレーションの精度と効率を向上させるには、pcregistericp を使用する前に、pcdownsample を使って点群のダウンサンプリングを行うことを検討してください。

'pointToPlane' メトリクスを選択した場合には、レジストレーション アルゴリズムにおいて点群の法線が必要です。そのため、入力点群の Normal プロパティが空の場合、関数がそれを指定します。関数が Normal プロパティを指定するとき、6 個の点を使用して局所平面への適合を行います。6 個の点でうまく適合できない場合もあります。'pointToPlane' メトリクスを使用したレジストレーションに失敗した場合、使用する点の数を選択できる、関数 pcnormals を呼び出すことを検討してください。

[tform,movingReg] = pcregistericp(moving,fixed) はさらに、固定点群に位置合わせされた変換後の点群を返します。

[___,rmse] = pcregistericp(moving,fixed) は、前述の構文のいずれかを使用し、位置合わせされた点群間のユークリッド距離の平方根平均二乗誤差を追加で返します。

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

すべて折りたたむ

点群データを読み込みます。

ptCloud = pcread('teapot.ply');

pcshow(ptCloud); 
title('Teapot');

z 軸に沿って 30 度の回転と [5,5,10] の平行移動を行う変換オブジェクトを作成します。

A = [cos(pi/6) sin(pi/6) 0 0; ...
    -sin(pi/6) cos(pi/6) 0 0; ...
            0         0  1 0; ...
            5         5 10 1];
tform1 = affine3d(A);

点群を変換します。

ptCloudTformed = pctransform(ptCloud,tform1);

pcshow(ptCloudTformed);
title('Transformed Teapot');

剛体レジストレーションを適用します。

tform = pcregistericp(ptCloudTformed,ptCloud,'Extrapolate',true);

結果を真の変換と比較します。

disp(tform1.T);
    0.8660    0.5000         0         0
   -0.5000    0.8660         0         0
         0         0    1.0000         0
    5.0000    5.0000   10.0000    1.0000
tform2 = invert(tform);
disp(tform2.T);
    0.8660    0.5000    0.0000         0
   -0.5000    0.8660    0.0000         0
    0.0000   -0.0000    1.0000         0
    5.0000    5.0000   10.0000    1.0000

入力引数

すべて折りたたむ

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

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

名前と値のペアの引数

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

例: 'Metric','pointToPoint' は、ICP アルゴリズムのメトリクスを 'pointToPoint' 文字ベクトルに設定します。

最小化メトリクス。'Metric' と文字ベクトル 'pointToPoint' または 'pointToPlane' で構成されるコンマ区切りのペアとして指定します。移動点群と固定点群間の剛体変換の推定は、反復最近接点 (ICP) アルゴリズムによって行われます。ICP アルゴリズムは、指定されたメトリクスに従って 2 つの点群間の距離を最小化します。

'Metric' を 'pointToPlane' に設定すると、処理する反復回数を減らすことができます。ただし、このメトリクスを指定すると、それぞれの反復処理内でアルゴリズムの追加のステップが必要になります。'pointToPlane' メトリクスは、平面のレジストレーションを改善します。

ダウンサンプリング方法の選択:
関数 pcdownsample を使用して点群をダウンサンプリングします。次に示す Metric の表に従って、関数 pcdownsample'random' 入力または 'gridAverage' 入力を使用します。

Metric移動点群のダウンサンプリング方法固定点群のダウンサンプリング方法
'pointToPoint''random''random'
'gridAverage''gridAverage'
'pointToPlane''gridAverage''gridAverage'
'random''nonuniformGridSample'

外挿。'Extrapolate' と boolean の true または false で構成されるコンマ区切りのペアとして指定します。このプロパティを true に設定すると、[2] で説明されているように、関数がレジストレーション状態空間でパスをトレースする外挿ステップを追加します。このプロパティを true に設定すると、収束にかかる反復の数を減らすことができます。

インライアのパーセント比。'InlierRatio' とスカラー値で構成されるコンマ区切りのペアとして指定します。この値を使用して、マッチするペアがインライアと見なされるパーセント比を設定します。マッチする点のペアのユークリッド距離がマッチング距離のパーセント比の範囲内にある場合、これらのペアはインライアと見なされます。既定の設定では、マッチするすべてのペアが使用されます。

最大反復回数。'MaxIterations' と正の整数で構成されるコンマ区切りのペアとして指定します。この値は、ICP が停止するまでの最大反復回数を指定します。

連続する ICP 反復間の許容誤差。'Tolerance' と 2 要素ベクトルで構成されるコンマ区切りのペアとして指定します。2 要素ベクトル [Tdiff, Rdiff] は、連続する ICP 反復で推定される並進と回転の差の絶対許容誤差を表します。Tdiff は、2 つの並進ベクトル間のユークリッド距離を測定します。Rdiff は、角度差を度数で測定します。最新の 3 つの連続する反復において推定された剛体変換間の平均の差が指定された許容誤差の値より小さくなると、アルゴリズムが停止します。

初期剛体変換。'InitialTransform' と affine3d オブジェクトで構成されるコンマ区切りのペアとして指定します。初期剛体変換は、外部での大まかな推定結果を指定する場合に役立ちます。

進行状況の表示。'Verbose' と logical スカラーで構成されるコンマ区切りのペアとして指定します。進行状況を表示するには、Verbosetrue に設定します。

出力引数

すべて折りたたむ

剛体変換。affine3d オブジェクトとして返されます。剛体変換は、移動点群を固定点群にレジストレーションします。affine3d オブジェクトは、3 次元剛体変換を示します。反復最近接点 (ICP) アルゴリズムは、移動点群と固定点群間の剛体変換を推定します。

変換後の点群。pointCloud オブジェクトとして返されます。変換後の点群は、固定点群と位置合わせされています。

平方根平均二乗誤差。位置合わせされた点群間のユークリッド距離として返されます。

アルゴリズム

参照

[1] Chen, Y. and G. Medioni. “Object Modelling by Registration of Multiple Range Images.” Image Vision Computing. Butterworth-Heinemann . Vol. 10, Issue 3, April 1992, pp. 145-155.

[2] Besl, Paul J., N. D. McKay. “A Method for Registration of 3-D Shapes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Los Alamitos, CA: IEEE Computer Society. Vol. 14, Issue 2, 1992, pp. 239-256.

R2018a で導入