2013-05-21 14 views
15

TinEye、Googleなどが「逆画像検索」を提供しています。写真をアップロードして、数秒で類似の写真を見つけることができます。データベースから視覚的に似た写真を見つけるためのアルゴリズム?

これらのアルゴリズムのオープンソース版はありますか?


私は「SIFT」と「視覚的に類似」の写真を見つけるための他のアルゴリズムを知っているが、彼らは唯一の他に、直接1枚の写真を比較するために働きます。すなわち、与えられた写真と類似の写真を見つけることは、O(n)の操作であり、視覚的に似ているすべての写真を見つけることはO(n^2)であり、どちらも非常に遅い。

結果セットをより管理しやすいものにするために、[リレーショナル]データベースによってインデックス付け可能なフィーチャーデスクリプタが必要です。

"視覚的に類似"とは、非常にと同様です。すなわち、Photoshopで軽く触れられた/再描画された写真、わずかに切り取られたまたはサイズ変更された写真、同じシーンの急速な連続で撮影された写真、または反転または回転された画像。

+1

LDA(Linear Discriminant Analysis)/ PCA(Principal Component Analysis)を見ましたか?私が正しく覚えていれば、彼らはある時点で画像処理や顔認識などに使われていました。彼らの強みは、特徴の説明をより扱いやすいものに縮小することです。この場合、ピクセル情報 –

+0

@Arthur:私は「画像の種類を問わずすべての画像の署名」を実装しています。この1つがパンを外していない場合、次の1つありがとう:-)顔認識私は必要はありません。 – mpen

+0

私は数年前に画像類似性エンジンを構築しました。あなたは確かにリレーショナルデータベースに機能を格納することができますが、あなたのクエリエンジンとして逆インデックスを使うことをお勧めします。それはあなたのデータの配信になると、より多くのスピードと柔軟性を提供します。 –

答えて

15

有効なアプローチは、Bag-of-Words modelです。

基本的に、ターゲット画像のオフライン計算を行うことができます。これらの画像から、多くの機能を抽出して、k-means clusteringのようなアルゴリズムを持つコードブックを作成することができます。最も近い画像を検索すると、コードブックのスペースにNearest neighbor searchのようなアルゴリズムが適用されます。これが唯一の可能性であると、真実がなければならない Visual similarity search algorithm

:隣人のために

はあなたにも見てみましょうFLANN

を使用することができます検索しますこの話題は本当に挑戦的であり、それについての正体は本当に巨大であると言われます。

だけでいくつかの参照:

+0

私が最も関心を寄せている部分は、〜500次元のベクトルを持つリレーショナルデータベース上で最近傍検索を実行する方法です。 – mpen

+0

私は答えを更新しました –

+1

FLANNは質問のDB部分には答えません;)すべてのデータが一旦メモリに入ればそれはすばらしいと思いますが、毎回100万のレコードをメモリに読み込むことはできません誰かが検索を実行します。おそらく私はすべてのデータをリクエスト間でメモリに保持していない限り、私の署名は〜500バイトだと思うので、FLANNのメモリ要件に応じてかなりの数を保存することができます。 – mpen

2

はを見てみましょうは、LSHアルゴリズムとある種のkdツリーを使用します。 また、このタスクはCBIRまたはイメージ重複検索と呼ばれます。