ほぼ重複する画像の検出[終了]


93

与えられた画像のセットを互いに類似度で並べ替えるにはどうすればよいですか。

現時点では、2つの画像間のヒストグラム分析を行うシステムを持っていますが、これは非常にコストのかかる操作であり、やり過ぎに思われます。

最適には、各画像にスコア(たとえば、RGB平均などの整数スコア)を与えるアルゴリズムを探しており、そのスコアで並べ替えることができます。同一のスコアまたは隣同士のスコアは重複の可能性があります。

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994 

画像あたりのRGB平均は最低ですが、同様のものはありますか?


5
重要な質問は、あなたが書いた内容と、ナフが指摘した関連する質問に対するいくつかの回答について考え、「類似性」の意味をより明確に定義したいと思うかもしれません。同一であるが5ピクセルのオフセットがある画像は「類似」しますか?視覚的にはそうです...しかし、アルゴリズムに対して...あなたがそれを考え、それを説明していなければ、おそらくそうではありません。詳細を教えてください。重複は正確でしょうか、それとも単に「近い」でしょうか?わずかな角度測定によってスキャンが異なる可能性があるスキャンを見ていますか?強度はどうですか?あり、多くの変数のは...ここに
Beska

「重複」はどのように異なりますか?例えば、それらは異なる位置/シフトを持つ同じ場所の画像でしょうか?画像の数がO(nlog(n))のものが必要なようです。これが可能かどうか誰かが知っていますか?それはそうかもしれないようです..
ジャスティン・シャイナー09:30

@不明:現在の回答に満足できない場合は、もう少しアドバイスをいただけますか?私たちはあなたの質問に答えるために最善を尽くしましたが、フィードバックがなければ、もっと良いものを思いつくことはまずありません。
Naaff、2009年

これは現在、コンピュータサイエンスの大きな未解決の問題の1つです。幸運の相棒。
john ktejik

回答:


70

画像検索と類似性の測定については多くの研究が行われてきました。それは簡単な問題ではありません。一般に、1つのint画像だけでは画像が非常に似ているかどうかを判断するには不十分です。偽陽性率が高くなります。

ただし、多くの調査が行われているため、その一部をご覧になることもできます。たとえば、このペーパー(PDF)は、多くのデータを保存せずに重複画像をすばやく見つけるのに適したコンパクトな画像指紋アルゴリズムを提供します。堅牢なものが必要な場合は、これが正しいアプローチのようです。

もっと簡単な、しかしもっと特別なものを探しているなら、このSOの質問にはいくつかのまともなアイデアがあります。


2
その論文は2004年のものですが、これがまだ最良の答えであるかどうかわかりませんか?
Andrew

50

RGBヒストグラムだけを使用しないことを検討することをお勧めします。

画像の2次元ハールウェーブレットを取得し(これは実際よりもはるかに簡単で、平均化が多く、係数の重み付けに平方根を使用しています)、kの最大値を保持すると、画像のより良いダイジェストを取得できます。ウェーブレットの重み付き係数をスパースベクトルとして正規化し、保存してサイズを小さくします。重要度を下げてクロミナンス情報をサンプリングできるように、少なくとも事前に知覚重みを使用してRGとBを再スケーリングするか、YIQ(またはYCoCg、量子化ノイズを回避する)に切り替えることをお勧めします。

これで、これらのスパース正規化ベクトルの2つのドット積を類似性の尺度として使用できます。最大のドット積を持つ画像ペアは、構造が非常に似ています。これには、サイズ変更、色相のシフト、透かしへの耐性があり、実装が簡単でコンパクトになるという利点があります。

kを増減することで、ストレージと精度をトレードオフできます。

単一の数値スコアによるソートは、この種の分類問題にとって扱いにくいものになります。あなたがそれについて考えるならば、それは画像が1つの軸に沿ってのみ「変化」することができることを必要とするでしょう、しかしそれらはそうではありません。これが特徴のベクトルが必要な理由です。ハールウェーブレットの場合、画像内で最も鋭い不連続が発生するおおよその場所です。画像間の距離はペアで計算できますが、距離の測定基準しか得られないため、線形順序付けでは3つの画像の「三角形」をすべて均等に表現する方法がありません。(つまり、すべて緑の画像、すべて赤の画像、すべて青の画像を考えてください。)

つまり、問題の実際の解決策では、イメージの数にO(n ^ 2)演算が必要になります。一方、メジャーを線形化することが可能であった場合、O(n log n)、またはメジャーがたとえば基数ソートに適している場合はO(n)のみを必要とする可能性があります。そうは言っても、実際にはセット全体をふるいにかける必要がないため、O(n ^ 2)を費やす必要はありません。あるしきい値よりも近いものを見つける必要があるだけです。したがって、スパースベクトル空間を分割するいくつかの手法のいずれかを適用することにより、すべての画像をすべての画像に対して単純に比較するよりも、「特定のしきい値よりも類似している画像のkを見つける」問題のはるかに速い漸近法を得ることができます。おそらく必要です...正確に要求されたものではないにしても。

いずれにしても、私が数年前に保存していたさまざまなテクスチャの数を最小限に抑えようとするときに個人的にこれを有効に使用しましたが、このスペースには多くの研究ノイズがあり、その効果を示しています(この場合はそれをヒストグラム分類のより洗練された形式に変換します):

http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf

検出の精度を高める必要がある場合は、minHashおよびtf-idfアルゴリズムをHaarウェーブレット(またはヒストグラム)と共に使用して、編集をより堅牢に処理できます。

http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf

最後に、スタンフォードは、この種のアプローチのよりエキゾチックな変形に基づく画像検索を備えています。ウェーブレットからより多くの特徴抽出を行って、回転または拡大縮小された画像のセクションなどを見つけることに基づいていますが、これはおそらく作業量をはるかに超えています。したいと思います。

http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi


候補となる候補を探すためにkdツリーなどを間接的に記述しているようです。これは注目に値するかもしれません。
Boojum

1
まあ、漠然とした暗示の範囲を超えてテクニックを指定しなかった理由は、空間内の次元数が比較的少ないときにkdツリーがうまく機能するためです。ここではおそらく、人口がまばらに存在する〜128以上のディメンションがあります。それらはまばらなので、値の大部分はゼロになるため、kdスタイルでパーティション化するためにディメンション間でラウンドロビンを実行しても、実際にはほとんど役に立ちません。同様に、Rツリーが機能しなくなり、最善策としてXツリーが残ります。残念ながら、それらは、その多くの次元に直面したとき、パフォーマンスの限界に近くなります。
エドワードKMETT 2009

"そして、ウェーブレットのk個の最大の重み付け係数をスパースベクトルとして保持します"-行ごとに、またはウェーブレット全体に対して保持しますか?
ivan.ukr

「少なくとも事前に知覚重みを使用してRGとBを再スケーリングする必要があります。そうしないと、重要度を下げてクロミナンス情報をサンプリングできるように、YIQ(または量子化ノイズを回避するためにYCoCg)に切り替えることをお勧めします。」-そして、それから?Yのみのウェーブレットですか、それともすべてのチャネルのウェーブレットですか?すべてのチャネルについて行う場合-複数のチャネルを持つ画像の類似性を測定するにはどうすればよいですか?各チャネルの内積を追加し、これを類似性の測定値として考慮しますか、それともいくつかの加重加算にする必要がありますか
ivan.ukr

15

私はこれに非常に信頼できるアルゴリズムを実装しました。これはFast Multiresolution Image Queryingと呼ばれています。そのための私の(古代の、メンテナンスされていない)コードはここにあります

Fast Multiresolution Image Queryingが行うのは、YIQ色空間に基づいて画像を3つの部分に分割することです(RGBよりもマッチングの違いに適しています)。次に、各カラースペースからの最も顕著な特徴のみが利用可能になるまで、ウェーブレットアルゴリズムを使用して画像を本質的に圧縮します。これらのポイントはデータ構造に保存されます。クエリ画像は同じプロセスを経て、クエリ画像の顕著な特徴が保存されたデータベースの特徴と照合されます。一致が多いほど、画像が類似している可能性が高くなります。

このアルゴリズムは、「スケッチによるクエリ」機能によく使用されます。私のソフトウェアでは、URL経由でのクエリ画像の入力しか許可されていなかったため、ユーザーインターフェイスはありませんでした。ただし、サムネイルをその画像の大きなバージョンに一致させると、非常にうまく機能することがわかりました。

さらに多くの印象的な、私のソフトウェアよりもretrievrあなたがソースとしてFlickrの画像を使用してFMIQアルゴリズムを試してみることができます。とてもかっこいい!スケッチやソース画像を使って試してみてください。うまくいくことがわかります。


それでも回転した画像を認識できますか?
内部石

それがうまくいくとは思えません。関連する一致を最大化するために、回転ごとに画像をエンコードする必要があります。
ルーク・フランクル、2009年

リトリーバーへのリンクがダウンしているようです-それはどこかにアーカイブされていますか?
mmigdol 2014

10

画像には多くの特徴があるため、平均的な明るさのように1つに絞り込まない限り、n次元の問題空間を扱っています。

世界の都市に単一の整数を割り当てるように依頼した場合、どの都市が近いかがわかるので、結果は素晴らしいものではありません。たとえば、単一の整数としてタイムゾーンを選択すると、特定の都市で良い結果が得られます。ただし、北極の近くの都市と南極の近くの別の都市は、惑星の両端にある場合でも、同じタイムゾーンにある可能性があります。2つの整数の使用を許可すると、緯度と経度で非常に良い結果を得ることができます。問題は画像の類似性についても同じです。

そうは言っても、類似した画像を一緒にクラスター化しようとするアルゴリズムがあります。これは、実際に求めていることです。これは、Picasaで顔検出を行うとどうなるかです。顔を特定する前であっても、類似した顔をクラスタリングするので、類似した顔のセットを簡単に調べて、ほとんどの顔に同じ名前を付けることができます。

また、主成分分析と呼ばれる手法もあり、n次元データをより少ない次元数に減らすことができます。したがって、n個の特徴を持つ画像を1つの特徴に減らすことができます。ただし、これはまだ画像を比較するための最良の方法ではありません。


1
それは論点ですが、たとえば、機能x = 2および機能y = 3および機能z = 5および機能aa = 7などの場合、任意の数の機能の組み合わせを表すために単一の整数を使用できます。次に、その素数の素因数が単一の整数の因数分解形式で累乗されたパワーが、その特定の画像の特徴の値になります。繰り返しますが、数字のサイズがばかげているので、問題点があります。そのサイズはさらに縮小できるかもしれませんが...構造化データについて話しているだけです。
アーガイル、2013年

そうだね。しかし、本当のポイントは、類似した画像が数値的に近接するように数字を配置することです。私が上で言ったことにもかかわらず、これは可能です。簡単に言えば、旅行中の営業担当者の問題を解決して、n次元空間(nは画像の比較に使用する特徴の数)の画像を通る最小(または最小に近い)パスを見つけることができます。しかし、それは高価です。
Neil

8

Cライブラリ( "libphash"-http : //phash.org/ )があり、画像の「知覚的ハッシュ」を計算し、ハッシュを比較することで類似した画像を検出できます(各画像を比較する必要はありません)他のすべての画像に対して直接)ですが、残念ながら、私が試したときはあまり正確ではなかったようです。


5

「似ている」とは何かを決める必要があります。コントラスト?色相?

画像は同じ画像を上下逆に「類似」していますか?

画像を4x4の部分に分割し、各グリッドセルの平均色を取得することで、多くの「近い呼び出し」を見つけることができると思います。画像ごとに16のスコアがあります。類似性を判断するには、画像間の差の二乗和を計算します。

色相、明るさ、コントラストなどの単一の概念に反しない限り、単一のハッシュは意味がないと思います。

ここにあなたのアイデアがあります:

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994

まず最初に、これらはR *(2 ^ 16)+ G *(2 ^ 8)+ Bなどの10進数であると想定します。赤は過度に重み付けされているので、明らかにそれは良くありません。

HSV空間に移動することをお勧めします。あなたは可能性がHSVのビットを広げハッシュに、またはあなただけ個別にHまたはSまたはVを解決することができ、またはあなたがイメージごとに3つのハッシュを持つことができます。


もう一つ。R、G、Bの重み付けを行う場合は、人間の視覚感度に合わせて、緑を最も高く、次に赤、次に青を重み付けします。


5

Webサービスの時代には、http://tineye.comを試すことができます


3
tineyeの背後にあるコードは、質問者が求めているものとまったく同じようですが、Webサービスとしては、2つの画像を与えて「これらは同じですか?」 」-2番目の画像はWebページ上にあり、tineyeによってインデックスが作成されている必要があります
dbr

1
たぶん、ビジネスユーザーにAPIを提供していますか?それらについては彼らに連絡するべきです。
zproxy 2009

そのservices.tineye.com/MatchEngineを正確に提供する商用APIがあります
Gajus


1

他の重複画像検索ソフトウェアが画像にFFTを実行し、異なる周波数の値をベクトルとして保存すると想定しました。

Image1 = (u1, u2, u3, ..., un)
Image2 = (v1, v2, v3, ..., vn)

次に、2つの画像の重みベクトル間の距離を計算することにより、2つの画像が等しいかどうかを比較できます。

distance = Sqrt(
     (u1-v1)^2 +
     (u2-v2)^2 +
     (u2-v3)^2 +
     ...
     (un-vn)^2);

2
ほとんどの自然画像は非常によく似た頻度のコンテンツを持っているので、これが非常に優れたメトリックになるとは思えません。
HannesOvrén、2009年

1

1つの解決策は、バブルソートを実行するために必要な画像のすべてのペアに対してRMS / RSS比較を実行することです。次に、各画像に対してFFTを実行し、軸の平均化を行って、並べ替えのインデックスとして使用する各画像の単一の整数を取得します。無視するように選択した差異の小ささと必要なスピードアップに応じて、オリジナルのサイズ変更(25%、10%)バージョンで比較を行うことを検討できます。これらの解決策が興味深いかどうか教えてください。議論したり、サンプルコードを提供したりできます。


FFTはカラー情報のみを提供し、位置に関する情報は提供しません。サイズ変更では、結果の画像への影響に関係なく、指定されたサイズ未満のすべての機能が無視されます。グレーの画像とチェッカーボードは、そのメジャーの下で同一にすることができます。ウェーブレットアプローチ(ドーベチー、ハールなど)には、各データポイントの位置情報と色情報の比率をトレードオフすることにより、位置情報と色情報の両方を提供するという利点があります。
エドワードKMETT 2009

2
いいえ、画像のFFTには元のすべての空間情報が含まれています。FFTからオリジナルを再構築できます。 homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm しかし、あなたが考えていたかもしれないヒストグラムはそうではありません。
ポール、

1

ほぼ重複する画像の検出を検出するための最新のアプローチでは、興味深い点の検出と、そのような点の周囲の領域を記述する記述子を使用します。多くの場合、SIFTが使用されます。次に、記述子を量子化し、クラスターを視覚的な単語ボキャブラリーとして使用できます。

したがって、これらの画像のすべての視覚的単語に対する2つの画像の一般的な視覚的単語の比率を見れば、画像間の類似性を推定できます。興味深い記事がたくさんあります。それらの1つは、 ほぼ重複する画像の検出です:minHashおよびtf-idf重み付け


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.