大きな画像内の画像の位置をどのように検出しますか?画像の変更されていないコピーがあります。次に、この画像は任意の解像度に変更され、任意のサイズのはるかに大きな画像内にランダムに配置されます。結果の画像に対して他の変換は実行されません。Pythonコードが理想的であり、おそらくlibgdが必要になります。この問題への良いアプローチを知っているなら、あなたは+1を得るでしょう。
4 に答える
迅速で汚い解決策があります。それは、ターゲット画像上でウィンドウをスライドさせ、各場所での類似性の測定値を計算してから、最も類似性の高い場所を選択するだけです。次に、類似性をしきい値と比較します。スコアがしきい値を上回っている場合は、画像がそこにあり、それが場所であると結論付けます。スコアがしきい値を下回っている場合、画像はありません。
類似性の尺度として、正規化された相関または差の2乗の合計(別名L2ノルム)を使用できます。人々が述べたように、これは規模の変化に対処しません。したがって、元の画像を複数回再スケーリングし、スケーリングされたバージョンごとに上記のプロセスを繰り返します。入力画像のサイズと可能なスケールの範囲によっては、これで十分な場合があり、実装は簡単です。
適切な解決策は、アフィン不変量を使用することです。「ワイドベースラインステレオマッチング」を調べてみてください。人々はその文脈でその問題を調べました。使用されるメソッドは、一般的に次のようなものです。
元の画像の前処理
- 「インタレストポイント検出器」を実行します。これにより、画像内のコーナーなど、簡単にローカライズできるいくつかのポイントが見つかります。多くの検出器がありますが、「harris-affine」と呼ばれる検出器はうまく機能し、かなり人気があります(したがって、実装はおそらく存在します)。もう1つのオプションは、Difference-of-Gaussians(DoG)検出器を使用することです。これは、SIFT用に開発されたものであり、同様に機能します。
- 各関心点で、小さなサブ画像(30x30ピクセルなど)を抽出します
- サブ画像ごとに、そのウィンドウ内の画像コンテンツの表現である「記述子」を計算します。繰り返しますが、多くの記述子が存在します。注目すべき点は、記述子が画像コンテンツをどの程度適切に記述しているか(2つの記述子が類似している場合にのみ一致させる必要がある)、不変である(スケーリング後も同じである必要がある)ことです。あなたの場合、SIFTの使用をお勧めします。他の記述子ほど不変ではありませんが、スケールにうまく対処できます。あなたの場合、変化するのはスケールだけです。
この段階の終わりに、記述子のセットができます。
テスト(新しいテストイメージを使用)。
- まず、手順1と同じインタレストポイント検出器を実行して、一連のインタレストポイントを取得します。上記のように、各ポイントに対して同じ記述子を計算します。これで、ターゲットイメージの記述子のセットもできました。
- 次に、一致するものを探します。理想的には、元の画像の各記述子に対して、ターゲット画像にかなり類似した記述子があります。(ターゲット画像が大きいため、「残りの」記述子、つまり元の画像の何にも対応しないポイントもあります。)したがって、元の記述子の十分な数が十分な類似性と一致する場合、ターゲットは次のようになります。そこの。さらに、記述子は場所固有であるため、元の画像がターゲット画像のどこにあるかもわかります。
おそらく相互相関が必要です。(自己相関は信号をそれ自体と相関させます。相互相関は2つの異なる信号を相関させます。)
完全に一致するものを単にチェックするだけでなく、相関関係があなたに与えることは、それが最良の一致がどこにあるか、そしてそれらがどれほど良いかを教えてくれるということです。裏返しに、2D画像の場合、O(N ^ 3)のようなものであり、それほど単純なアルゴリズムではありません。しかし、それを機能させると、それは魔法です。
編集:ああ、あなたは任意のサイズ変更を指定しました。これにより、相関ベースのアルゴリズムが破られます。申し訳ありませんが、あなたは今私の経験の範囲外であり、SOはこの回答を削除させません。
http://en.wikipedia.org/wiki/Autocorrelationは私の最初の本能です。
スケール不変特徴変換を見てください; たまたま使用している画像の種類に合わせて調整されたさまざまなフレーバーがあります。