Main Content

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

pcmatchfeatures

点群の間の一致する特徴を検出

R2020b 以降

説明

indexPairs = pcmatchfeatures(features1,features2) は、抽出された点群の特徴を含む入力行列の間の一致する特徴を検出し、それらの各特徴行列におけるインデックスを返します。

indexPairs = pcmatchfeatures(features1,features2,ptCloud1,ptCloud2) は、特徴行列に対応する点群からの空間関係情報に基づいてあいまいな特徴の一致を棄却します。

[indexPairs,scores] = pcmatchfeatures(___) は、前述の構文の任意の入力引数の組み合わせを使用して、一致する特徴の間の正規化されたユークリッド距離を返します。

[___] = pcmatchfeatures(___,Name,Value) は、前述の構文の任意の引数の組み合わせに加え、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、'MatchThreshold',0.03 は、一致する特徴についての正規化された距離のしきい値を 0.03 に設定します。

すべて折りたたむ

この例では、対応する点群の特徴を関数 pcmatchfeatures を使用して照合する方法を示します。

前処理

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

ptCld = pcread("teapot.ply");

点群をダウンサンプリングします。

ptCloud = pcdownsample(ptCld,"gridAverage",0.05);

変換行列 A を使用して、新しい点群を変換によって作成します。

A = [cos(pi/6) -sin(pi/6) 0 5; ...
     sin(pi/6)  cos(pi/6) 0 5; ...
            0         0   1 10; ...
            0         0   0 1];     
tform = affinetform3d(A);
ptCloudTformed = pctransform(ptCloud,tform);

2 つの点群を可視化します。

pcshowpair(ptCloud,ptCloudTformed);
legend("Original", "Transformed","TextColor",[1 1 0]);

Figure contains an axes object. The axes object contains 2 objects of type scatter. These objects represent Original, Transformed.

対応する特徴の照合

前処理のセクションで、元の点群を並進および回転することで 2 つ目の点群を作成しました。このセクションでは、関数 pcmatchfeatures を使用して、それらの点群の間の一致する特徴を検出します。

関数 extractFPFHFeatures を使用して両方の点群から特徴を抽出します。

fixedFeature = extractFPFHFeatures(ptCloud);
movingFeature = extractFPFHFeatures(ptCloudTformed);
length(movingFeature)
ans = 16578

一致する特徴を検出します。

[matchingPairs,scores] = pcmatchfeatures(fixedFeature,movingFeature,ptCloud,ptCloudTformed);
length(matchingPairs)
ans = 3412

スコアがゼロに近ければ一致に関するアルゴリズムの信頼性が高いことを意味し、その逆も同様です。scores ベクトルを使用して、すべての一致についての平均スコアを計算します。

mean(scores)
ans = 0.0017

入力引数

すべて折りたたむ

1 つ目の特徴セット。M1N 列の行列として指定します。この行列は M1 個の特徴を含み、N は各特徴ベクトルの長さです。各行が 1 つの特徴を表します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

2 つ目の特徴セット。M2N 列の行列として指定します。この行列は M2 個の特徴を含み、N は各特徴ベクトルの長さです。各行が 1 つの特徴を表します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

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

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

名前と値の引数

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

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

例: 'MatchThreshold',0.03 は、一致する特徴についての正規化された距離のしきい値を 0.03 に設定します。

照合方法。'Method''Exhaustive' または 'Approximate' のいずれかからなるコンマ区切りのペアとして指定します。この方法により、features1features2 の間で関数が最近傍をどのように検索するかが決まります。2 つの特徴ベクトルは、それらの間の距離が一致しきい値以下である場合に一致します。

  • 'Exhaustive' — 指定された特徴ベクトルの間のペアワイズ距離を計算します。

  • 'Approximate' — 効率的な近似最近傍探索を使用します。この方法は大規模な特徴セットに使用します。アルゴリズムの詳細については、[1]を参照してください。

データ型: char | string

一致しきい値。'MatchThreshold' と範囲 (0, 1] のスカラーからなるコンマ区切りのペアとして指定します。

2 つの特徴ベクトルは、それらの間の正規化されたユークリッド距離が一致しきい値以下である場合に一致します。この値を高くすると一致が増える可能性がありますが、誤検知のリスクも高まります。

データ型: single | double

空間関係しきい値。'RejectRatio' と範囲 (0,1) のスカラーからなるコンマ区切りのペアとして指定します。

関数は、点群データを使用して一致する可能性がある特徴に関連する点の間の空間関係を推定し、空間関係しきい値に基づいて一致を棄却します。空間関係しきい値を低くすると一致が増える可能性がありますが、誤検知のリスクも高まります。

入力引数 ptCloud1ptCloud2 の値を指定しない場合、関数で空間関係しきい値は考慮されません。

メモ

空間関係を考慮するには、特徴行列の間で少なくとも 3 つの特徴が一致しなければなりません。

データ型: single | double

出力引数

すべて折りたたむ

一致した特徴のインデックス。P 行 2 列の行列として返されます。P は一致した特徴の数です。各行は、入力 features1features2 の間の一致した特徴に対応します。ここで、最初の要素は features1 における特徴のインデックス、2 つ目の要素は features2 における一致する特徴のインデックスです。

データ型: uint32

一致する特徴の間の正規化されたユークリッド距離。P 要素の列ベクトルとして返されます。ベクトルの i 番目の要素は、出力 indexPairsi 行目にある一致した特徴の間の距離です。

データ型: single | double

参照

[1] Muja, Marius and David G. Lowe. "Fast Approximate Nearest Neighbors with Automatic Algorithm Configuration." In Proceedings of the Fourth International Conference on Computer Vision Theory and Applications, 331-40. Lisboa, Portugal: SciTePress - Science and Technology Publications, 2009. https://doi.org/10.5220/0001787803310340.

[2] Zhou, Qian-Yi, Jaesik Park, and Vladlen Koltun. "Fast global registration." In European Conference on Computer Vision, pp. 766-782. Springer, Cham, 2016.

拡張機能

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

バージョン履歴

R2020b で導入