web-dev-qa-db-ja.com

検出器、抽出器、および照合器の分類

私はopencvを初めて使い、2つの画像間で画像マッチングを実装しようとしています。この目的のために、機能記述子、記述子抽出子、および記述子照合プログラムの違いを理解しようとしています。私は多くの用語に出くわし、opencvのドキュメントWebサイトでそれらについて読み込もうとしましたが、概念について頭をかき回すことができないようです。ここで基本的な違いを理解しました。 特徴検出と記述子抽出の違い

しかし、私はトピックについて勉強しているときに次の用語に出くわしました:

FAST、GFTT、SIFT、SURF、MSER、STAR、ORB、BRISK、FREAK、BRIEF

FAST、SIFT、SURFがどのように機能するかを理解していますが、上記のどれが検出器のみで、どれが抽出器であるかを理解できないようです。

次に、マッチャーがあります。

FlannBased、BruteForce、knnMatch、およびおそらく他のいくつか。

少し読んだ後、ここで説明したように、特定のマッチャーは特定のエクストラクターでのみ使用できると考えました。 OpenCV ORB Feature Detectorの仕組み 指定された分類は非常に明確ですが、それはいくつかの抽出器のみのためであり、floatとucharの違いがわかりません。

だから基本的に、誰かが喜ばせることができます

  1. 前述のように、floatとucharに基づいて検出器、抽出器、および照合器のタイプを分類しますか、または他のタイプの分類ですか?
  2. floatとucharの分類の違い、または使用されている分類を説明してください。
  3. さまざまな種類の検出器、抽出器、および照合器を初期化(コード化)する方法に言及していますか?

私はそれが多くを求めていることを知っていますが、私は非常に感謝します。ありがとうございました。

58
hriddle

FAST、SIFT、SURFがどのように機能するかを理解していますが、上記のどれが検出器のみで、どれが抽出器であるかを理解できないようです。

基本的に、特徴検出器/抽出器のリストから(記事へのリンク: [〜#〜] fast [〜#〜][〜#〜] gftt [〜#〜][〜#〜] sift [〜#〜][〜#〜] surf [〜#〜][〜#〜] mser [〜#〜][〜#〜] star [〜#〜][〜#〜] orb [〜#〜] 、- [〜#〜] brisk [〜#〜][〜#〜] freak [〜#〜][〜#〜] brief [〜#〜 ] )、それらの一部は特徴検出器のみです(FAST、GFTT)その他は特徴検出器と記述子抽出器の両方です(SIFT、SURF、ORB、FREAK)。

正しく覚えていれば、[〜#〜] brief [〜#〜]は単なる記述子抽出ツールであるため、次のような他のアルゴリズムによって検出される機能が必要です。 FASTまたはORB。

どちらを確認するには、アルゴリズムに関連する記事を参照するか、opencvドキュメントを参照して、FeatureDetectorクラス用に実装されたものとDescriptorExtractorクラス用に実装されたものを確認する必要があります。

Q1:前述のように、floatとucharに基づいて検出器、抽出器、および照合器のタイプを分類しますか?

Q2:floatとucharの分類の違い、または使用されている分類を説明してください。

質問1と2について、それらをfloatとucharとして分類するには、 すでに投稿したリンク が私が知っている最高のリファレンスです、おそらく誰かがそれを完了することができます。

Q3:さまざまな種類の検出器、抽出器、および照合器を初期化(コード化)する方法について説明してください。

質問3に答えて、OpenCVはさまざまなタイプを使用するコードをまったく同じにしました-主に1つの特徴検出器を選択する必要があります。違いのほとんどは、マッチャーのタイプを選択することであり、OpenCVが持っている3つのものについては既に述べました。ここでの最善の策は、ドキュメント、 コードサンプル 、および関連するStack Overflowの質問を読むことです。また、これらのようないくつかのブログ投稿は優れた情報源です Ievgen Khvedcheniaによる一連の機能検出ベンチマーク (ブログはもう利用できないので、Googleキャッシュから生のテキストコピーを作成する必要がありました) 。

Matchersは、記述子がリストの別の記述子と類似しているかどうかを調べるために使用されます。クエリ記述子をリストの他のすべての記述子と比較するか(BruteForce)、またはより良いヒューリスティックを使用することができます(FlannBased、knnMatch)。問題は、すべてのタイプの記述子に対してヒューリスティックが機能しないことです。たとえば、FlannBased実装はfloat記述子でのみ動作し、ucharで動作しませんでした(ただし、2.4.0以降、LSHインデックス付きのFlannBasedはuchar記述子に適用できます)。

引用 このApp-Solutブログの投稿DescriptorMatcherタイプについて:

DescriptorMatcherには、「FlannBased」、「BruteForceMatcher」、「BruteForce-L1」、および「BruteForce-HammingLUT」があります。 「FlannBased」マッチャーは、フードの下でflann(近似最近傍の高速ライブラリ)ライブラリを使用して、より高速で近似のマッチングを実行します。 「BruteForce- *」バージョンは、辞書を徹底的に検索して、辞書内のWordに最も近い画像特徴を見つけます。

より一般的な組み合わせのいくつかは次のとおりです:

機能検出器/デクリプター抽出器/マッチャータイプ

  • (ファスト、サーフ)/サーフ/フランベース

  • (高速、SIFT)/ SIFT/FlannBased

  • (FAST、ORB)/ ORB /ブルートフォース

  • (FAST、ORB)/ Brief /ブルートフォース

  • (ファスト、サーフ)/フリーク/ブルートフォース

また、特徴検出器にいくつかのアダプター(動的、ピラミッド、グリッド)があることに気づいたかもしれません。 App-Solutブログの投稿 は、その使用方法を非常にうまくまとめています。

(...)また、キーポイント検出器の動作を変更するために使用できるアダプターがいくつかあります。たとえば、画像内に十分なキーポイントが見つかるまで検出器タイプ固有の検出しきい値を調整するDynamicアダプター、または複数のスケールでポイントを検出するガウスピラミッドを構築するPyramidアダプター。 Pyramidアダプターは、スケール不変でないフィーチャー記述子に役立ちます。

さらに読む:

  • Yu Luによるこのブログ投稿 は、SIFT、FAST、SURF、BRIEF、ORB、BRISK、およびFREAKについて非常に素晴らしい要約説明をしています。

  • これら Gil Leviによる一連の投稿 は、これらのアルゴリズムのいくつか(BRIEF、ORB、BRISK、およびFREAK)の詳細な要約も行います。

78
Rui Marques