2

CUDA / CUBLAS / CUFFT をサポートする OpenCV を使用して、グレースケールのスクリーンショットで非常に基本的なテンプレート マッチングを実行し、テキストを抽出しています。つまり、次のことを想定できます。

一致させようとしている未加工のスプライトの正確なサイズ、色、および回転を知っています。つまり、観察されたプログラムのレンダリング プロセスで使用されたテクスチャにアクセスできます。

ただし、スプライトは部分的に透明であるためcv::(gpu::)matchTemplate、透明領域の偏差が全体的な相関に悪影響を与えるため、通常のテンプレート マッチング (正規相互相関を使用) は適切に機能しません。

基本的に、これらの例は、私が達成しようとしていることを非常によく要約しています:

照合するテンプレートとそのアルファ マスクを指定すると、次のようになります。

一致するスプライト テンプレート。テンプレート アルファ マスク。

これらのような画像(任意の背景、透明な領域のランダムなもの、部分的に遮られたもの)で高からほぼ100%の一致が欲しい:

白い背景のスプライト。黒の背景にスプライト任意の背景 + 部分的に遮られた透明な領域。部分的に閉塞。

ただし、次のような画像は非常に低いパーセンテージしか得られません (間違った色、完全に黒): ここに画像の説明を入力ここに画像の説明を入力

現在、エッジ検出を使用してまともな一致 (キャニー + 相互相関) を取得していますが、ご覧のとおり、背景によっては、画像にエッジが存在する場合と存在しない場合があり、信頼性の低い結果が生成され、一般的に非常に一致します。エッジの効いた」エリア。

紙の上では問題なく動作しますが、良好なパフォーマンスで実装することはほぼ不可能です。プログラムの速度に追いつくために、複数のスプライト (~10) をほぼリアルタイム (~10 FPS) で一致させる必要があるためです。

私はここでアイデアを使い果たしています。これに対する標準的なアプローチはありますか?アイデアや提案はありますか?

4

1 に答える 1

4

それで、私はついに数学とCUFFTを使ってこれを自分で解決することができました。私はそれを「アルファ加重の標準化された相互相関」と呼んだ。ここにあります:

アルファ加重の正規化相互相関

この方法を使用すると、OPのような場合に非常に良い一致(> 0.99)が得られます。さらに、ほとんどの透明なピクセルを単に無視するようにアルファマスクをしきい値設定するのに役立ちます。

于 2012-09-02T19:34:02.507 に答える