Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

pcregistericp

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

説明

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

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

"pointToPlane" または "planeToPlane" (Generalized-ICP または G-ICP とも呼ばれる) メトリクスを選択する場合、レジストレーション アルゴリズムには点群の法線が必要です。入力点群の Normal プロパティが空の場合、関数がそれを指定します。

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

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

[___] = pcregistericp(moving,fixed,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、pcregistericp(moving,fixed,Metric="planeToPlane") は、最小化メトリクスを "planeToPlane" に設定します。

すべて折りたたむ

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

ptCloud = pcread("teapot.ply");

読み込まれた点群を表示します。

pcshow(ptCloud) 
title("Teapot")

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

Z 軸に沿って 30 度回転し、[5 5 10] の並進を行う変換オブジェクトを作成します。

rotationAngles = [0 0 30];
translation = [5 5 10];
tform1 = rigidtform3d(rotationAngles,translation);

点群を変換し、結果を可視化します。

ptCloudTformed = pctransform(ptCloud,tform1);

pcshow(ptCloudTformed)
title("Transformed Teapot")

Figure contains an axes object. The axes object with title Transformed Teapot contains an object of type scatter.

点群を登録します。

tform = pcregistericp(ptCloudTformed,ptCloud);

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

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

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

ld = load("livingRoom.mat");
moving = ld.livingRoomData{1};
fixed  = ld.livingRoomData{2};

点群を可視化し、y 軸を表示する方向を設定します。

figure
pcshowpair(moving,fixed,VerticalAxis="Y",VerticalAxisDir="Down")

Figure contains an axes object. The axes object contains 2 objects of type scatter.

nonuniformGridSample 法を使用して点群をダウンサンプリングし、レジストレーションの効率と精度を向上させます。

maxNumPoints = 12;
fixedDownsampled = pcdownsample(fixed,"nonuniformGridSample",maxNumPoints);
movingDownsampled = pcdownsample(moving,"nonuniformGridSample",maxNumPoints);

plane-to-plane (Generalized-ICP) レジストレーションを使用して点群を整列させます。

[~,movingReg] = pcregistericp(movingDownsampled,fixedDownsampled,Metric="planeToPlane");

点群の整列を可視化し、y 軸を表示する方向を設定します。

figure
pcshowpair(movingReg,fixed,VerticalAxis="Y",VerticalAxisDir="Down")

Figure contains an axes object. The axes object contains 2 objects of type scatter.

色情報をもつ移動点群データをワークスペースに読み込みます。

moving = pcread("apartmentMoving.pcd");

色情報をもつ固定点群データをワークスペースに読み込みます。

fixed  = pcread("apartmentFixed.pcd");

色付きの点群を可視化し、yx 平面を表示する方向を設定します。

figure
pcshowpair(moving,fixed,"ViewPlane","YX","ColorSource","Color")

Figure contains an axes object. The axes object contains 2 objects of type scatter.

plane-to-plane (Generalized-ICP) レジストレーションと色情報を使用して色付きの点群を整列させます。引数 Metric の値を planeToPlaneWithColor. として設定します。

[~,movingReg] = pcregistericp(moving,fixed,Metric="planeToPlaneWithColor");

yx 平面の表示方向を設定して、整列した点群を可視化します。

figure
pcshowpair(movingReg,fixed,"ViewPlane","YX","ColorSource","Color")

Figure contains an axes object. The axes object contains 2 objects of type scatter.

入力引数

すべて折りたたむ

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

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

名前と値の引数

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

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: "planeToPlane" は、ICP アルゴリズムの最小化メトリクスを "planeToPlane" に設定します。

最小化メトリクス。"pointToPoint""pointToPlane""planeToPlane""planeToPlaneWithColor"、または "pointToPlaneWithColor" として指定します。反復最近接点 (ICP) アルゴリズムは、指定されたメトリクスに従って移動点群と固定点群の間の距離を最小化することにより、2 つの点群間の剛体変換を推定します。

Metric"pointToPlane" または "planeToPlane" (Generalized-ICP アルゴリズムとも呼ばれる) として指定すると、レジストレーションに必要な反復回数を減らすことができます。ただし、これらのメトリクスには、反復ごとに追加のアルゴリズム手順が必要です。

平面のレジストレーションを改善するには、Metric"pointToPlane" または "planeToPlane" として指定します。"pointToPlaneWithColor" または "planeToPlaneWithColor" メトリクスを使用して、色情報をもつ点群のレジストレーションを改善します。

ダウンサンプリング方法の選択
関数 pcdownsample を使用して点群をダウンサンプリングします。"pointToPoint" メトリクスを選択する場合、レジストレーション アルゴリズムには点群の法線が必要です。"nonuniformGridSample" アルゴリズムは、ダウンサンプリングの前に元のデータで法線を計算し、より正確な法線を生成します。したがって、"nonuniformGridSample" ダウンサンプリング法を使用すると、より正確な "pointToPoint" レジストレーションが可能になります。次の表に従って、関数 pcdownsample"random""gridAverage"、または "nonuniformGridSample" 法を使用します。

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

"pointToPlaneWithColor" メトリクスは、マルチスケール レジストレーション アプローチを使用します。これは、粗いレジストレーションから細かいレジストレーションに向かって点群をレジストレーションするものです。粗い位置合わせの結果が、次の細かいレジストレーション ステップに初期変換として供給されます。このように、関数 pcregistericp では入力点群の法線が使用されないため、ダウンサンプリングの方法によりレジストレーションの正確性に影響が生じることはありません。

外挿。logical の 0 (false) または 1 (true) として指定します。この引数を true に指定すると、『A Method for Registration of 3-D Shapes』で説明されているように、レジストレーション状態空間内でパスをトレースする外挿ステップが関数によって追加されます。外挿を有効にすると、点群の収束に必要な反復回数を減らすことができます。

"planeToPlane""pointToPlaneWithColor"、または "planeToPlaneWithColor" のメトリクスを使用する場合、名前と値の引数 Extrapolate を指定することはできません。

警告

Extrapolate の名前と値の引数は、将来のリリースで削除される予定です。同様の正確性を得るには、MaxIterations を増やすか、名前と値の引数 Metric"pointToPlane" または "planeToPlane" の値を使用します。

マッチするペアのインライアの割合。(0, 1] の間のスカラーとして指定します。この値は、マッチするペアをインライアとして使用するためのパーセント比を指定します。この関数は、点群のマッチ ペア内にある任意の 2 点間の最大ユークリッド距離について指定した割合よりも 2 点間のユークリッド距離が小さい場合、マッチする点のペアをインライアであると見なします。既定では、関数はマッチするすべてのペアをインライアとして使用します。代わりに距離を使用してインライアを指定するには、名前と値の引数 InlierDistance を使用します。

インライア距離のしきい値。スカラーとして指定します。この値は、インライアとして関数に考慮させるために、固定点群内の点と移動点群内のマッチ点との間の最大距離を設定します。より正確な初期変換である InitialTransform を使用する場合は、この値を減らします。初期変換の不確実性が高い場合は、この値を大きくします。この値を増やすと、レジストレーションの速度が低下する可能性があることに注意してください。代わりに、点群間のマッチする点のペアの比率としてインライアを指定するには、名前と値の引数 InlierRatio を使用します。

最大反復回数。正の整数として指定します。この値は、関数が 2 つの点群の収束を試みる最大反復回数を指定します。

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

初期剛体変換。rigidtform3d オブジェクトとして指定します。既定値は、移動点群と固定点群の重心間の並進を含む rigidtform3d オブジェクトです。初期剛体変換は、外部で大まかな推定を行う場合に役立ちます。

進行状況の表示。logical の 0 (false) または 1 (true) として指定します。進行状況を表示するには、Verbosetrue に指定します。

出力引数

すべて折りたたむ

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

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

平方根平均二乗誤差。位置合わせされた点間のユークリッド距離を表す正の数値スカラーとして返されます。rmse 値が低いほど、レジストレーションがより正確であることを示します。

アルゴリズム

すべて折りたたむ

Illustration of complete point cloud registration workflow.

ヒント

  • 地上車両の点群の場合、レジストレーション前に関数 pcfitplane または関数 segmentGroundFromLidarData を使用して地面を削除することにより、パフォーマンスと精度を向上させることができます。これを行う方法の詳細については、LiDAR データからのマップの作成 (Automated Driving Toolbox)の例の補助関数 helperProcessPointCloud を参照してください。

  • 2 つを超える点群をマージするには、関数 pcmerge の代わりに関数 pccat を使用します。

参照

[1] Besl, P.J., and Neil D. McKay. “A Method for Registration of 3-D Shapes.” IEEE Transactions on Pattern Analysis and Machine Intelligence 14, no. 2 (February 1992): 239–256. https://doi.org/10.1109/34.121791.

[2] Chen, Yang, and Gérard Medioni. “Object Modelling by Registration of Multiple Range Images.” Image and Vision Computing 10, no. 3 (April 1992): 145–155. https://doi.org/10.1016/0262-8856(92)90066-C.

[3] Segal, A., Haehnel, D. and S. Thrun. "Generalized-ICP". Robotics: Science and Systems V, Robotics: Science and Systems Foundation,. (June 2009): 435-442. https://doi.org/10.15607/RSS.2009.V.021.

[4] Korn, Michael, Martin Holzkothen, and Josef Pauli. "Color supported generalized-ICP." In 2014 International Conference on Computer Vision Theory and Applications (VISAPP), 592–599. Lisbon, Portugal: IEEE, 2014. https://doi.org/10.5220/0004692805920599.

[5] Park, Jaesik, Qian-Yi Zhou, and Vladlen Koltun. "Colored point cloud registration revisited." In Proceedings of the IEEE International Conference on Computer Vision (ICCV), 143-152. Venice, Italy: IEEE, 2017. htttps://doi.org/10.1109/ICCV.2017.25.

拡張機能

バージョン履歴

R2018a で導入

すべて展開する