19

参照オブジェクト (コインなど) を含む参照白黒画像があります。オブジェクトはユーザーによってマークされます。これが関心領域です。

次に、他の画像を分析して、そのオブジェクトまたは類似のオブジェクトの位置と回転を見つけたいと思います。オブジェクトはカメラの下に任意に配置されますが、スケーリングされることはなく、視野角は常に 90 度です。

私は、私が望むことを正確に実行する商用ライブラリを評価しました: Euresys EasyFind

以下に、当面のタスクのサンプル画像を示します。現在の実装は OpenCV の機能検出を使用しており、問題なく動作していません。

テンプレート:

ここに画像の説明を入力

まったく同じコインの一致が見つかりました。

ここに画像の説明を入力

コインがわずかに異なる場合、一致は失敗します。

ここに画像の説明を入力

機能検出は間違ったアプローチのようです。どういうわけかオブジェクトを単純化する必要があります。しかし、それを行うと (Blur、Canny、CornerHarris) 特徴検出がまったく機能しません。

堅実なアプローチのためのアドバイスは大歓迎です。代替図書館の提案も素晴らしいでしょう。

4

5 に答える 5

10

かなりの数の可能な手法を試したので、次のリンクを参照するようにお願いします (参照した可能性があるかもしれません!!!)。

  1. すべての特徴検出器と記述子の比較
  2. サーフ、フリーク、ブリスクの組み合わせ

失敗した3番目の画像はコントラストが低く、残りの2つと完全に一致させるのは少し難しいです...そこでコントラスト調整を行い、Orb Feature DetectorとOrb Descriptor Extractorで次の一致を得ました..コントラスト調整を適用しました特徴検出前のすべての画像に。

画像 1 と画像 3

ここに画像の説明を入力

画像 2 と画像 3

ここに画像の説明を入力

画像 1 と画像 2 (この組み合わせは、すべての検出器/抽出器のペアでうまく機能します)

ここに画像の説明を入力

マッチングに使用BruteForceMatcher<Hamming> matcher しました ポイントはローカライズされていますが、向きはかなりうまく推測できます。複数の手法を使用し、最初にいくつかの円検出を行って、特徴検出を可能な限り最小の ROI に制限する必要があります。円の中心に対する検出されたポイントのプラス方向は、新しい方向情報を簡単に提供します。1st リンクと 2nd リンクを見ると、SURF と BRIEF は光の強弱の変化やブレにかなり強いことがわかります。したがって、SURF と BRIEF の組み合わせも試すことができます。

于 2013-01-14T09:50:29.247 に答える
4

何の前処理も行わずにキーポイント検出器を入力に適用することは、関連する興味深い一致点を見つけるための非常に貧弱な方法です。

画像が与えられると、数学的形態学はそれらを前処理するための優れたツールを提供し、うまくいけば後のステップでより良い一致を得られます。これらのツールの 1 つは形態学的再構成と呼ばれ、その一般化はレベリングと呼ばれ、マーカー イメージに基づいてフラット ゾーンを結合および拡張します。ご覧のとおり、画像はどこにでも谷 (暗い点) があるという意味で非常にノイズが多いため、そのほとんどを抑制したいと考えています。レベリングの実装はまったく難しいことではありませんが、私は自由に利用できるツールを知らないので (実際にはフランスで開発された大規模なフレームワークがあり、それが含まれていると思われますが、名前は覚えていません)、そのままにしておきましょう。より標準的な形態学的再構成。マーカー画像もありませんが、簡単に作成できます。いくつかの構造化要素で画像を浸食し、形態学的再構築を適用します。これは、一部の著者によって測地線開口部と呼ばれています。これにより、ノイズの多い谷の一部が抑制されます。

この時点で、画像はいくつかのキーポイント検出器で使用するのに適しているかもしれませんが、一致させたいものはグレースケール トーンとは無関係であるため、画像を 2 値化することをお勧めします。これに対する典型的な自動方法は Otsu によって与えられていますが、Kapur の方法のようにヒストグラム エントロピー最小化を行う方法もあります。私は Otsu を使用しませんでした。これは非常に一般的であるためです。いくつかの Stackoverflow ノベルティのために、この別の方法を使用しました :P (はい、非常に悪い理由です)。最後に、二値化の後、画像の処理を続行できます。いくつかの残りのノイズ ポイントを削除する必要があるため、ここでは 1 つのモルフォロジー クロージングで十分な場合があります (これらのノイズ ポイントは必ずしもコンポーネントから切り離されているわけではないため、コンポーネントを削除することは、現時点では悪い選択になる可能性があります)。

手短に言うと、最初の画像のジオデシック オープニングと最終的な前処理 (上記のポイントを使用) は次のとおりです。

ここに画像の説明を入力 ここに画像の説明を入力

そして、これが他の2つの画像の最終結果です(まったく同じプロセスを適用し、一定の変更などはありません):

ここに画像の説明を入力 ここに画像の説明を入力

ここで、典型的な SURF 法を使用してこれらを照合すると、ほぼ完全な一致が得られ、他の問題 (一方を他方に対して方向付ける) を非常に簡単に解決できます。私が得たマッチングの結果は含めません (誰かが結果を比較したい場合を除きます)。これは、OpenCV またはその他の適切な実装を使用して同じ結果が得られるはずだからです。

重要な場合は、上記の前処理を実現する Mathematica の単一行を次に示します。

g = Closing[Binarize[GeodesicOpening[f, DiskMatrix[5]], Method -> "Entropy"], 1]

ここfで、 はグレースケールの入力画像で、gは結果のバイナリ イメージです。

于 2013-01-16T19:36:26.217 に答える
3

質問は非常に広く、正確に何を達成したいかに応じて多くの方法があります。ハフ変換を使用すると、コインが丸いので検出できますが、多くの丸い要素を検出する可能性があります(したがって、他の同様のものが表示されているかどうかによって異なります)。

より一般的には、特徴検出器(SURF、ORB、FAST、Shi-Tomassi)を使用して、コインを含む参照フレームとそれを探しているフレームの間で抽出と照合を行う必要があります。次に、ホモグラフィ変換を使用して、見つけたポイントが同じであることを確認できます。これにより、コインが見つかりました。

この例を見てください:

Features2D+既知のオブジェクトを見つけるためのホモグラフィ

于 2012-11-29T21:21:49.727 に答える
3

一般に、変更がシステムのパフォーマンスに影響を与える可能性がある場合は、次の手順を実行します。

  1. 検出器とその構成
  2. 記述子とその構成
  3. マッチャーとその構成
  4. RANSAC パラメーター (または使用しているもの)

検出器としてMSER (最大安定極値領域)を試すことができます。この検出器は、SIFT/SURF などの他の検出器ほど多くのキーポイントを検出しないことが知られています。しかし、それらは非常に安定しており、ユニークです。しかし、マッチングのために別の記述子を試してみます。おそらくFREAK (Fast Retina Keypoint)です。

RANSAC アルゴリズムを使用したフィルタリングで十分ですが、好きな距離を設定することでいつでも微調整できます。RANSAC がうまく機能しない場合は、うまく機能するようになるまでデフォルトのしきい値を切り替えてみてください。

変更できるもう 1 つのことは、マッチャーです。FLANN は非常に優れていますが、結果を概算するだけであり、高次元空間での検索時に優れたパフォーマンスを発揮します。ただし、パフォーマンスが問題にならない場合は、ユークリッド距離またはマハラノビス距離で BruteForceMatcher を試してください。

[EDIT-1]: *今、私はあなたに追加のcould-help-your-suggestions =)を提供しようとしています. * Kampel et al. 彼らの記事「Image-Based Retrieval and Identification of Ancient Coins」で、古代コインに形状記述子を与えてアイテムの記述機能を強化するいくつかの追加のアプローチについて説明しています。

もう 1 つの問題は、外れ値を排除するための非常に制限的なアプローチである RANSAC である可能性があります。このメソッドMat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() )には追加のパラメーターがあります (このリンクをクリックしてください)。すべてのポイント、RANSAC、または最小中央値の堅牢な方法を使用できます。

または、適切な一致を取得するための適切なしきい値となる可能性のある距離を堅牢に計算しようとします。標準のチュートリアルでは、最初に検出された最小距離の 2 倍を使用しますが、現在の一致の距離に依存するため、あまり堅牢ではありません。

標準の OpenCV に含まれていない他の記述子/検出器がいくつかあります。Lindbjerg は、彼の論文「Finding the Best Feature Detector-Descriptor Combination」で、MSER が DAISY-Descriptor と連携して動作することを説明しています。または、 AGASTまたはBRISKを試すこともできます。本当の大きな欠点の 1 つは、それらがすべて標準の OpenCV ディストリビューションに含まれていないことです。いくつかの実装がありますが、それらを統合する必要があるため、多くの作業が必要になる可能性があります。

于 2013-01-09T18:12:47.767 に答える
1

あなたに最適なのは、に似たブルートフォース検索のバージョンだと思いますcvMatchTemplateすべての特徴抽出ベースの検索は、非常にノイズに敏感です。特定のタイプの特徴が関心のあるすべての画像で目立つようになることを知っている事前の理由がない限り(たとえば、コインの輪郭の円/楕円)、特徴抽出で優れたパフォーマンスが得られる可能性は低くなります。ブルートフォースマッチングの問題は、スケールと回転に敏感であるということです。おそらく、スケールフリーマッチング、および/またはブルートフォース可能なスケールと回転についての文献を見ることができます。提供したサンプル画像の場合、数度回転して数パーセント拡大すると、実際にはかなりよく一致します。あなたは「ただ」数百の呼び出しを必要としますcvMatchTemplate回転、スケーリングされたバージョンを検索します。

于 2013-01-14T04:20:51.853 に答える