web-dev-qa-db-ja.com

サイズに関係なく、画像が「同じ」か類似しているかを識別するためにどのアルゴリズムを使用できますか?

TinEye 、「画像を使用して検索するエンジン」を使用すると、画像をアップロード/リンクでき、クロールした10億枚の画像を検索でき、検出した画像へのリンクが返されます。同じ画像です。

ただし、これは単純なチェックサムやそれに関連するものではありません。多くの場合、提供した元の画像よりも高解像度と低解像度、およびサイズの大きい画像と小さい画像の両方を見つけることができます。私はよく画像を見つけて、可能な限り最高の解像度のバージョンが欲しいので、これはサービスの良い使い方です。

それだけでなく、同じ画像セットの画像を見つけました。画像内の人物は別の位置にありますが、背景はほとんど同じです。

どのタイプのアルゴリズムを使用できますか TinEye 画像をさまざまなサイズや圧縮率の他の画像と比較しながら、それらが「同じ」画像またはセットであることを正確に把握できるようにしますか?

40
mmcdole

これらのアルゴリズムは通常、指紋ベースです。フィンガープリントは、長いハッシュコードのような、適度に小さいデータ構造です。ただし、フィンガープリント関数の目標はハッシュ関数の目標と反対です。優れたハッシュ関数は、非常に類似した(ただし等しくない)オブジェクトに対して非常に異なるコードを生成する必要があります。逆に、フィンガープリント機能は、類似した画像に対して同じフィンガープリントを生成する必要があります。

例を挙げると、これは(特に良くない)指紋関数です。画像のサイズを32x32の正方形に変更し、色を正規化して量子化し、色の数を256のように減らします。これで1024バイトの指紋ができます。画像用。指紋の表を保持するだけです=> [画像のURLのリスト]。特定の画像に似た画像を表示する必要がある場合は、その指紋値を計算して、対応する画像リストを見つけます。簡単。

簡単ではないこと-実際に役立つためには、指紋関数は作物、アフィン変換、コントラストの変化などに対して堅牢である必要があります。優れた指紋関数の構築は別の研究トピックです。多くの場合、それらは手動で調整され、多くのヒューリスティックを使用します(つまり、典型的な写真の内容、画像形式/ EXIFの追加データなどに関する知識を使用します)

もう1つのバリエーションは、複数の指紋関数を使用し、それぞれを適用して結果を組み合わせることです。実際、それは似たようなテキストを見つけることに似ています。 「バッグオブワード」の代わりに、画像類似性検索は「バッグオブフィンガープリント」を使用して、あるバッグの要素が別のバッグの要素と同じであるかどうかを見つけます。この検索を効率的にする方法は別のトピックです。

さて、記事/論文について。さまざまな方法の概要を説明する良い記事が見つかりませんでした。私が知っている公開記事のほとんどは、特定の方法に対する特定の改善について説明しています。これらを確認することをお勧めします:

"ウェーブレットを使用したコンテンツフィンガープリント" 。この記事はウェーブレットを使用したオーディオフィンガープリントについてですが、同じ方法を画像フィンガープリントにも適用できます。

順列のグループ化:オーディオと画像の取得のためのインテリジェントなハッシュ関数の設計 。局所性鋭敏型ハッシュに関する情報。

大規模な部分重複Web画像検索のバンドル機能 。非常に良い記事で、効率のためのSIFTとバンドル機能について説明しています。最後に素敵な参考文献もあります

40
Igor Krivokon

これはおそらく、スケール不変の特徴を利用した特徴抽出アルゴリズムの改善に基づいています。

を見てみましょう

または、本当に興味がある場合は、約70ドルを支払うことができます(または少なくともGoogleプレビューを見てください)

8
Vinko Vrsalovic

FotoForensicsサイトの作成者は、このトピックに関するこのブログ投稿を投稿しました。これは私にとって非常に役立ち、ウェーブレットや特徴抽出よりもはるかに少ない作業で十分なアルゴリズムを示しました。

http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html

aHash(平均ハッシュまたは平均ハッシュとも呼ばれます)。このアプローチでは、画像をグレースケールの8x8画像に分割し、ピクセルの値が画像の平均色よりも大きいかどうかに基づいて、ハッシュに64ビットを設定します。

pHash(「知覚ハッシュ」とも呼ばれます)。このアルゴリズムはaHashに似ていますが、離散コサイン変換(DCT)を使用し、色の値ではなく周波数に基づいて比較します。

dHashaHashやpHashと同様に、dHashは実装が非常に簡単で、本来の権利よりもはるかに正確です。実装として、dHashはaHashとほぼ同じですが、パフォーマンスが大幅に向上します。 aHashは平均値に焦点を合わせ、pHashは頻度パターンを評価しますが、dHashは勾配を追跡します。

7
RipperDoc

http://tineye.com/faq#how

これに基づいて、 Igor Krivokonの答え は的を射ているようです。

5
j_random_hacker

ハフ変換 は非常に古い特徴抽出アルゴリズムであり、興味深いと思います。 tinyeyeが使用しているものではないかと思いますが、特徴抽出について学ぶための良い、簡単な出発点です。

きちんとした話へのスライド トロント大学の人々から astrometry.net での仕事についてもあります。彼らは、画像の特徴を特定するために、夜空の伸縮画像を星のカタログ内の場所に一致させるためのアルゴリズムを開発しました。 tinyeyeが解決しようとしている問題よりも具体的な問題ですが、彼らが話している基本的な考え方の多くは、より一般的な問題にも当てはまると思います。

4
Boojum

このブログ投稿 (私のものではありません)をチェックして、非常に理解しやすいアルゴリズムの非常に理解しやすい説明を確認してください。基本的に、それぞれの画像を非常に粗いグリッドに分割し、グリッドを赤:青と緑:青の比率で並べ替え、並べ替えが同じかどうかを確認します。これは当然、カラー画像に対してのみ機能します。

プロは、はるかに高度なアルゴリズムを使用して、より良い結果を得る可能性が最も高いです。そのブログのコメントで述べられているように、主要なアプローチはウェーブレットのようです。

1
John Y

彼らは、フーリエ変換を行って画像の複雑さを特徴付けたり、ヒストグラムを使用して色分布を特徴付けたり、領域分類アルゴリズムと組み合わせて、同様に複雑で色付きの画像が誤ってペアにならないようにしている可能性があります。それが彼らが使用しているものであるかどうかはわかりませんが、それでうまくいくようです。

0
Paul Sonier

写真のサイズを標準の小さいサイズに変更し、SSIMまたは輝度のみのPSNR値を確認するのはどうですか?それが私がすることです。

0
Camilo Martin