1. ホーム
  2. image-processing

[解決済み】画像の類似性を比較する簡単で高速な方法

2022-04-10 04:02:19

質問

2つの画像の類似性を比較するためのシンプルで高速な方法が必要です。例えば、全く同じものを含んでいても、背景が少し違っていたり、数ピクセル移動/サイズ変更されていたりすると、高い値を取得したいのです。

(重要であれば、より具体的に。一方の画像はアイコンで、もう一方の画像はスクリーンショットのサブエリアであり、そのサブエリアがまさにアイコンであるかどうかを知りたいのです)

私は OpenCV 手元にあるのですが、まだそれほど慣れていません。

ここまでで考えた可能性を一つ。両方の写真を10×10のセルに分割し、その100個のセルそれぞれについて、カラーヒストグラムを比較します。そして、しきい値を設定して、そのしきい値以上の値が得られたら、両者は似ていると判断します。

まだ試していないのですが、これで十分だと思います。画像はすでにかなり似ているので(私の使用例では)、かなり高いしきい値を使用することができます。

タスク自体は非常に単純で、本当に非常に似ている場合にのみ類似性を検出したいので)多かれ少なかれ機能する、これに対する何十もの他の可能なソリューションがあると思います。何かいい方法はないでしょうか?


画像から署名/指紋/ハッシュを取得することに関して、いくつかの非常に関連/類似した質問があります。

また、このような指紋を取得する機能を持つ実装を偶然にも見つけました。

知覚的画像ハッシュに関するいくつかの議論。 こちら


少し話がそれますが オーディオのフィンガープリントを作成する方法は数多く存在します。 ミュージックブレーンズ 曲のフィンガープリント・ベースの検索を提供するウェブサービスである wikiに概要が掲載されています。 . 彼らは アコースティックID になりました。これは完全一致(またはほぼ完全一致)を見つけるためのものです。類似のマッチを見つける場合(または、いくつかのスニペットや高いノイズしかない場合)には、次のものを見てください。 エコープリント . 関連するSOの質問は こちら . ということで、オーディオについては解決したようです。これらの解決策はすべて、非常によく機能します。

ファジーサーチ全般に関するやや一般的な質問としては こちら . 例えば、次のようなものがあります。 ローカルセンシティブハッシュ 最近接探索 .

どのように解決するのですか?

スクリーンショットやアイコンを変形(拡大縮小、回転、歪み...)させることはできますか?私の頭の中には、おそらくお役に立てるであろう方法がかなりあります。

  • 単純ユークリッド距離 carlosdc さんによって言及されたように(変換された画像では動作せず、閾値が必要です)。
  • (正規化)相互相関 - は、画像領域の比較に使用できる簡単な指標です。単純なユークリッド距離よりも堅牢ですが、変換された画像では動作せず、また閾値が必要になります。
  • ヒストグラム比較 - 正規化ヒストグラムを使用する場合、この方法はうまく機能し、アフィン変換の影響を受けません。問題は、正しい閾値を決定することです。また、色の変化(明るさ、コントラストなど)に対して非常に敏感です。前の2つと組み合わせることができます。
  • 顕著な点/領域の検出器 - など MSER (最大安定極限領域) , サーフ または SIFT . これらは非常に堅牢なアルゴリズムであり、あなたの単純なタスクには複雑すぎるかもしれません。良い点は,1つのアイコンしかないような正確な領域でなくても,これらの検出器は十分に強力で,正しいマッチングを見つけることができることです。これらの手法の評価は、この論文にあります。 局所不変な特徴検出器:サーベイ .

これらのほとんどは,OpenCV に既に実装されています.例えば, cvMatchTemplate メソッド(ヒストグラムマッチングを利用)などを参照してください. http://dasl.mem.drexel.edu/~noahKuntz/openCVTut6.html . 顕著点/領域検出器も利用可能です。 OpenCVの特徴検出 .