メインコンテンツ

pcmatchfeatures

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

説明

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

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

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

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

すべて折りたたむ

MAT ファイルから点群データを読み込みます。

ld = load("livingRoom.mat");
ptCloud1 = ld.livingRoomData{1};
ptCloud2 = ld.livingRoomData{2};

読み込まれた点群を可視化します。

figure
pcshowpair(ptCloud1,ptCloud2)

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

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

gridSize = 0.05;
ptCloud1 = pcdownsample(ptCloud1,"gridNearest",gridSize);
ptCloud2 = pcdownsample(ptCloud2,"gridNearest",gridSize);

各点群の特徴を検出します。

features1 = extractFPFHFeatures(ptCloud1);
features2 = extractFPFHFeatures(ptCloud2);

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

indexPairs = pcmatchfeatures(features1,features2,ptCloud1,ptCloud2);

一致した点を選択します。

matchedPoints1 = select(ptCloud1,indexPairs(:,1));
matchedPoints2 = select(ptCloud2,indexPairs(:,2));

一致した特徴を可視化します。

figure
pcshowMatchedFeatures(ptCloud1,ptCloud2,matchedPoints1,matchedPoints2,Method="montage")

Figure contains an axes object. The axes object contains 5 objects of type scatter, line. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

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