1

同じオブジェクトを表しているかどうかを判断するために、2つの画像間の類似性を検出するプログラムを開発しています。主題を研究した後、私は3つの主要なコンポーネントが必要であると判断しました:

  • 検出器
  • 抽出器/記述子
  • マッチャー

私は最初の2つを正常に実装しました(助けが必要な場合は私をPMしてください、それは大きな苦痛になる可能性があることを知っています)が、マッチャーに問題があります。これが私が使用するコードの一部です:

    DMatch matches = new DMatch();
    BFMatcher matcher = new BFMatcher(NORM_HAMMING, true);
    [...]
    matcher.match(descriptor1, descriptor2, matches, null);
    System.out.println("Matches: " + matches.capacity());

matches.capacity()の出力は58です。これは、キーポイントまたは記述子ポイントの数がまったく同じになることを期待していたときです(画像をそれ自体と比較しているためです...)。間違った結果を期待していますか?私は何か他のことを間違っていますか?いくつかの助けをいただければ幸いです:)

編集:

私はなんとか私のプログラムを終えることができました、そして今、それが私の前の状況で誰かを助けることを望んで、私自身の質問に答えることができます:

matcher.match(...)メソッドは、各画像(たとえば、descriptor1とdescriptor2)を記述するバイナリ文字列またはfloatベクトルを計算し、クエリインデックス(keypoints1のキーポイントのインデックス)、trainインデックス(keypoints2に相当するインデックス)を返します。 queryIndex内のポイントと、それらのポイント間のハミング距離を一致させます。これは、画像1のすべてのポイントを画像2のすべてのポイントに一致させます(少なくともdrawMatchesから、これが私の結論です)が、2つの画像間の一致率を決定する場合は、DMatchの一致コンテンツをフィルタリングする必要があります。このためには、自分でアルゴリズムを作成する必要があります(2 * minDistなど、オンラインで見つけたアルゴリズムはどれもうまく機能しませんでした)。

さらにヘルプやコードが必要な場合は、遠慮なくPMに連絡してください。この画像マッチングプロセス全体を理解することがどれほど苛立たしいことかを私は知っています!

4

1 に答える 1

0

検出された有効な一致数matches.size()を取得するために使用する必要があります(内部配列に割り当てられたサイズを示します)。capacity

于 2012-10-04T12:44:43.097 に答える