2つの画像を比較するアルゴリズム


158

2つの異なる画像ファイル(選択した形式にかかわらず)を考えると、1つが別の画像ファイルの違法コピーであるかどうかを予測するプログラムを作成する必要があります。コピーの作成者は、回転、ネガの作成、または些細な詳細の追加(および画像の寸法の変更)などを行う場合があります。

この種の仕事をするためのアルゴリズムを知っていますか?


12
どれがオリジナルかをどのように判断しますか?
jfs 2008

1
私は彼がオリジナルを持っていると思います、そして外部ファイルが変形されたコピーであるかオリジナルに関連していないかどうかを確認する必要があると思います。
unfa 16

回答:


303

これらは単に私が問題について考えていたアイデアですが、試したことはありませんが、私はこのような問題について考えることが好きです!

あなたが始める前に

画像を正規化することを検討してください。一方が他方よりも高い解像度である場合、一方が他方の圧縮バージョンであるオプションを検討してください。したがって、解像度を縮小するとより正確な結果が得られる可能性があります。

画像のズームされた部分と、さまざまな位置と回転を表す可能性がある画像のさまざまな予想領域をスキャンすることを検討してください。画像の1つが別の画像の歪んだバージョンである場合、トリッキーになります。これらは、特定して妥協する必要のある種類の制限です。

Matlabは画像をテストおよび評価するための優れたツールです。

アルゴリズムのテスト

少なくとも事前に一致がわかっている人間が分析した大規模なテストデータのセットをテストする必要があります。たとえば、テストデータに、画像の5%が一致する1,000個の画像がある場合、妥当な信頼性のあるベンチマークが得られます。10%の陽性を見つけるアルゴリズムは、テストデータで4%の陽性を見つけるアルゴリズムほど優れていません。ただし、1つのアルゴリズムですべての一致が見つかる可能性がありますが、誤検出率も20%と大きいため、アルゴリズムを評価する方法はいくつかあります。

テストデータは、現実の世界で見られると予想されるできるだけ多くの種類のダイナミクスをカバーするように設計する必要があります。

有用である各アルゴリズムはランダムな推測よりも優れたパフォーマンスを発揮する必要があることに注意することが重要です。そうでない場合、それは役に立ちません!

次に、制御された方法でソフトウェアを現実の世界に適用し、生成した結果の分析を開始できます。これは無限に進むことができる種類のソフトウェアプロジェクトであり、行うことができる微調整と改善は常にあります。それは、終わることのないプロジェクトの罠に陥りやすいので、設計するときにそれを覚えておくことは重要です。

カラーバケット

2つの画像を使用して、各ピクセルをスキャンし、色を数えます。たとえば、「バケット」があるとします。

white
red
blue
green
black

(明らかに、カウンターの解像度が高くなります)。「赤い」ピクセルを見つけるたびに、赤いカウンターを増やします。各バケットは色のスペクトルを表すことができ、解像度が高いほど正確になりますが、許容できる差異率を試してみてください。

合計を取得したら、2番目の画像の合計と比較します。各画像には、一致を識別するのに十分な、かなりユニークなフットプリントがあることに気付くでしょう。

エッジ検出

エッジ検出の使用についてはどうですか。 (ソース:wikimedia.org代替テキスト

2つの類似した画像を使用すると、エッジ検出により、使用可能でかなり信頼できる一意のフットプリントが得られます。

両方の写真を撮り、エッジ検出を適用します。おそらく、エッジの平均の厚さを測定し、画像が拡大縮小される可能性を計算し、必要に応じて再拡大縮小します。以下は、さまざまな回転で適用されたガボールフィルター(エッジ検出の一種)の例です。

代替テキスト

ピクセルごとに写真のピクセルを比較し、一致と非一致をカウントします。それらが特定のエラーしきい値内にある場合は、一致しています。それ以外の場合は、特定のポイントまで解像度を下げて、一致の確率が向上するかどうかを確認できます。

関心のある地域

一部の画像には、特徴的なセグメント/関心領域がある場合があります。これらの領域はおそらく他の画像と非常に対照的であり、他の画像で一致を見つけるために検索するのに適したアイテムです。たとえば、次の画像を見てください。

代替テキスト
(ソース:meetthegimp.org

青色の建設作業員は関心領域であり、検索オブジェクトとして使用できます。この関心のある領域からプロパティ/データを抽出し、それらを使用してデータセットを検索する方法はおそらくいくつかあります。

2つ以上の関心領域がある場合は、それらの間の距離を測定できます。この簡単な例を見てみましょう:

代替テキスト
(ソース:per2000.eu

3つの明確な関心領域があります。領域1と2の間の距離は、200ピクセル、1から3 400ピクセル、2から3 200ピクセルにすることができます。

類似の関心領域を他の画像で検索し、距離値を正規化して、一致する可能性があるかどうかを確認します。この手法は、回転および拡大縮小された画像に適しています。関心領域が多いほど、距離測定値が一致するたびに一致する確率が高くなります。

データセットのコンテキストについて考えることが重要です。たとえば、データセットがモダンアートである場合、関心領域はおそらく最終的な画像の基本部分になるように設計されているため、関心領域は非常にうまく機能します。しかし、建設現場の画像を扱っている場合、関心のある領域は違法なコピー機によって醜いと解釈され、自由に切り取られたり編集されたりする可能性があります。データセットの共通の特徴に留意し、その知識を活用してみてください。

モーフィング

2つの画像のモーフィングとは、一連のステップを通じて1つの画像を別の画像に変換するプロセスです。

代替テキスト

これは、ある画像を別の画像にフェードインするのとは異なります。

画像をモーフィングできるソフトウェアパッケージは多数あります。これは伝統的に遷移効果として使用され、2つの画像は通常途中で何かに変形することはなく、1つの極端なものが最終結果として他の極端に変形します。

なぜこれが役立つのでしょうか?使用するモーフィングアルゴリズムによっては、画像の類似性とモーフィングアルゴリズムの一部のパラメーターとの間に関係がある場合があります。

大幅に簡略化した例では、1つのアルゴリズムは、実行する変更が少ない場合に実行が速くなる可能性があります。次に、これら2つの画像が互いにプロパティを共有する可能性が高くなることを確認します。

この手法、回転、ゆがみ、傾斜、ズームなど、あらゆるタイプのコピー画像に適しています。繰り返しますが、これは私が持っているアイデアにすぎません。私が知る限り、それは研究された学界に基づいていないので(私は一見難しくありません)、結果は限られているか、結果がありません。

圧縮

この質問に対するOwの回答はすばらしいです。AIを研究するこのような種類のテクニックについて読んだことを覚えています。コーパス語彙集の比較に非常に効果的です。

コーパスを比較するときの興味深い最適化の1つは、「The」、「A」、「And」など、一般的すぎると見なされる単語を削除できることです。これらの単語は結果を希釈します。2つのコーパスの違いを調べたいと思います。したがって、これらは処理前に削除できます。おそらく、圧縮前に取り除かれる可能性のある同様の一般的な信号が画像にありますか?調べる価値があるかもしれません。

圧縮率は、2つのデータセットがどの程度類似しているかを判断するための非常に迅速かつ合理的に効果的な方法です。圧縮どのように機能するについて調べることで、これが非常に効果的である理由がわかります。高速リリースのアルゴリズムの場合、これはおそらく良い出発点になります。

透明性

繰り返しますが、特定の画像タイプ、gif pngなどの透明度データがどのように保存されるかはわかりませんが、これは抽出可能であり、データセットの透明度と比較するための効果的な単純化されたカットアウトとして機能します。

信号の反転

画像は単なる信号です。スピーカーからノイズを再生し、別のスピーカーで反対のノイズをまったく同じ音量で完全に同期して再生すると、お互いに打ち消し合います。

代替テキスト
(ソース:themotorreport.com.au

画像を反転して、他の画像に追加します。十分な数のピクセルが白(または黒ですか?これをニュートラルキャンバスと呼びます)で十分な一致または部分一致が得られる結果の画像が見つかるまで、繰り返し/ループ位置をスケーリングします。

ただし、2つの画像が同じである場合を考えてみます。

代替テキスト
(ソース:mcburrz.com

それらの1つを反転してからもう1つに追加しても、目的のニュートラルキャンバスにはなりません。ただし、両方の元の画像のピクセルを比較すると、2つの間の明確な関係が確実にわかります。

私はここ数年色を研究していないので、カラースペクトルが線形スケールであるかどうかはわかりませんが、両方の画像間の色差の平均係数を決定した場合は、この値を使用してデータを正規化してから、このテクニック。

ツリーデータ構造

最初はこれらは問題に適合していないようですが、うまくいくと思います。

画像の特定のプロパティ(カラービンなど)を抽出して、ハフマンツリーまたは同様のデータ構造を生成することを検討できます。2つのツリーの類似性を比較できる場合があります。これは、たとえば色のスペクトルが大きい写真データではうまく機能しませんが、漫画やその他の減色されたカラーセットの画像では機能する可能性があります。

これはおそらく機能しませんが、アイデアです。トライデータ構造は、例えば、dictionartyを辞書を格納で素晴らしいです。これはプレフィックスツリーです。おそらく、レキシコンに相当する画像を作成して(ここでも色についてしか考えられません)、トライを作成することができます。300x300の画像を5x5の正方形に縮小した場合、各5x5の正方形を一連の色に分解すると、結果のデータからトライを構成できます。2x2の正方形が含まれている場合:

FFFFFF|000000|FDFD44|FFFFFF

24レベルを拡張するかなりユニークなトライコードがあり、レベルを増減(IEはサブスクエアのサイズを増減)すると、より正確な結果が得られます。

トライツリーの比較はかなり簡単で、効果的な結果が得られる可能性があります。

その他のアイデア

衛星画像の分類についての興味深い論文に遭遇しました。その概要は次のとおりです。

考慮されるテクスチャメジャーは、共起行列、グレーレベルの違い、テクスチャトーン分析、フーリエスペクトルから派生した機能、およびガボールフィルターです。一部のフーリエ機能と一部のガボールフィルターは、特に単一の周波数帯域が分類に使用された場合に、良い選択であることがわかりました。

これらの測定値の一部はデータセットに関連しない場合もありますが、これらの測定値をさらに詳しく調査する価値があります。

その他の考慮事項

この種のことについてはおそらく多くの論文があるので、それらは非常に専門的かもしれませんが、それらのいくつかを読むと役立つはずです。これはコンピューティングにおいて非常に困難な分野であり、多くの人々が同様のことを試みて費やした多くの無駄な時間を費やしています。それをシンプルに保ち、それらのアイデアに基づいて構築するのが最善の方法です。ランダムな一致率よりも優れたアルゴリズムを作成することはかなり困難な挑戦であり、それを改善し始めることは実際に達成するのが非常に難しくなります。

おそらく、それぞれの方法を徹底的にテストして微調整する必要があります。チェックする画像の種類に関する情報がある場合は、これも役立ちます。たとえば広告の場合、その多くにテキストが含まれるため、テキスト認識を行うと、特に他のソリューションと組み合わせると、一致を見つけるのが簡単で、おそらく非常に信頼できる方法になります。前述のように、データセットの一般的なプロパティを利用しようとします。

(有効性に応じて)重み付け投票が可能な代替測定と手法を組み合わせることは、より正確な結果を生成するシステムを作成できる1つの方法です。

この回答の冒頭で述べたように、複数のアルゴリズムを採用している場合、すべての陽性が見つかることがありますが、偽陽性率は20%です。他のアルゴリズムの特性/強度/弱点を別のアルゴリズムで調査することは興味深いことです。他から返される偽陽性を排除するのに効果的です。

終わりのないプロジェクトを完成させようとしないように注意してください。


21
素晴らしい反応。よく考えられた啓発的な答えに対する称賛。
Andrew Hubbs 2010

ありがとうございました!私はそれを明日さらに発展させたいと思っています。私は考えて調べたいいくつかのアイデアがあります。
トムガレン

こんにちはトム-オープンソースのエッジ検出ライブラリを知っていますか?
リチャードH

1
こんにちはリチャード、申し訳ありませんが、いくつかあると確信しています。グーグルで「Java Gabor Filters」または「Java Edge Detection」を検索すると、1つまたは2つに出くわすと思います。
トムガレン

画像のリンク(blog.meetthegimp.orgwp-content / uploads / 2009/04 / 97.jpg)が不良になりました。現在、stackoverflowにはイメージホスティングサービスがあります。
ThomasW 2011年

36

論文を読む:ポリクリ、ファティ、オセルトゥゼル、ピーターミーア。「リーマン多様体上の平均に基づくモデル更新を使用した共分散追跡」。(2006)IEEEコンピュータビジョンおよびパターン認識。

このペーパーで紹介した手法を使用して、隣接するWebカメラからキャプチャした画像の重複領域を検出することに成功しました。私の共分散行列は、元のグレースケールピクセルだけでなく、Sobel、canny、SUSANのアスペクト/エッジ検出出力で構成されていました。


1
@Satoru Logic:google.com/…のように、グーグル検索は論文のヒットを表示します。
Nick

34

アイデア:

  1. キーポイント検出器を使用して、画像内のいくつかのポイント(SIFT、SURF、GLOH、LESHなど)のスケールおよび変換不変記述子を見つけます。
  2. キーポイントを両方の画像(パノラマステッチのように)の類似した記述子に合わせて調整し、必要に応じていくつかの画像変換を許可します(例:スケールと回転、または伸縮)。
  3. 多くのキーポイントがうまく整列している場合(そのような変換が存在する、そのキーポイント整列エラーが低い、または変換の「エネルギー」が低いなど)は、類似した画像を持っている可能性があります。

ステップ2は簡単ではありません。特に、他の画像で最も類似したキーポイントを見つけるには、スマートアルゴリズムを使用する必要がある場合があります。ポイント記述子は通常、非常に高次元(100のパラメーターなど)であり、調べる必要のある多くのポイントがあります。ここではkd-treesが役立つかもしれません。ハッシュ検索はうまく機能しません。

バリエーション:

  • ポイントではなくエッジやその他の特徴を検出します。

2
それも正しいアプローチだと思います。詳細:SIFT、SURF、GLOHはキーポイント検出器ではありません。それらはキーポイント記述子です。一般的なキーポイント検出器は、(スケール不変の)DoG、ハリス、または固有値検出器です。
Nikiは

ステップ2では、記述子間のユークリッド距離を使用する最近傍を使用できます
MobileCushion

15

見た目ほど単純ではありません:-)ニックの提案は良いものです。

はじめに、価値のある比較方法は基本的に画像を別の形式に変換することで機能することを覚えておいてください。これは、類似の機能を簡単に選択できる形式です。通常、これは非常に軽い読書にはなりません...


私が考えることができる最も単純な例の1つは、単に各画像の色空間を使用することです。2つの画像の色分布が非常に似ている場合は、それらが同じものを示していることを合理的に確信できます。少なくとも、フラグを立てたり、より多くのテストを行ったりするのに十分な確実性があります。色空間で画像を比較すると、回転、拡大縮小、一部の切り抜きなどにも抵抗します。もちろん、画像の大幅な変更や色の変更に抵抗することはありません(単純な色相のシフトでさえ多少注意が必要です)。

http://en.wikipedia.org/wiki/RGB_color_space
http://upvector.com/index.php?section=tutorials&subsection=tutorials/colorspace


別の例には、ハフ変換と呼ばれるものがあります。この変換は、基本的に画像を一連の線に分解します。次に、各画像の「最も強い」線をいくつか取り、それらが並んでいるかどうかを確認します。回転とスケーリングも試して補正するために追加の作業を行うことができます。この場合、数行を比較することは、画像全体に対して同じことを行うよりもはるかに少ない計算作業であるため、それほど悪くはありません。

http://homepages.inf.ed.ac.uk/amos/hough.html
http://rkb.home.cern.ch/rkb/AN16pp/node122.html
http://en.wikipedia.org/wiki/ハフトランスフォーム


8

あなたが説明した形では、問題は難しいです。画像の一部を別の大きな画像にコピーして貼り付けることを検討していますか?等

後退する場合は、マスター画像に透かしを入れると、これを簡単に解決できます。画像にコードを埋め込むには、透かしスキームを使用する必要があります。一歩下がるには、一部の人々によって提案された低レベルのアプローチ(エッジ検出など)のいくつかとは対照的に、透かし方法は優れています。

信号処理攻撃に対して耐性があります。►信号強調–シャープ、コントラストなど。►フィルタリング–中央値、ローパス、ハイパスなど。►付加ノイズ–ガウス、均一など。►非可逆圧縮– JPEG、MPEGなど。

それは幾何学的な攻撃に耐性があります►アフィン変換►データ削減–クロッピング、クリッピングなど►ランダムなローカル歪み►ワーピング

透かしアルゴリズムに関する調査を行うと、問題を解決するための正しい道に進むことができます。(注:STIRMARKデータセットを使用してメソッドをベンチマークできます。これは、このタイプのアプリケーションの標準として認められています。


5

これは単なる提案であり、機能しない可能性があり、私はこれについて呼び出される準備ができています。

これは誤検知を生成しますが、できれば誤検知ではありません。

  1. 同じサイズになるように両方の画像のサイズを変更します(幅と長さの比率は両方の画像で同じであると想定しています)。

  2. 両方の画像のビットマップを可逆圧縮アルゴリズム(gzipなど)で圧縮します。

  3. ファイルサイズが類似しているファイルのペアを見つけます。たとえば、ファイルサイズがどれだけ類似しているかによって、ファイルのすべてのペアを並べ替えて、上位のXを取得することができます。

私が言ったように、これは間違いなく偽陽性を生成しますが、うまくいけば偽陰性ではありません。これは5分で実装できますが、Porikil et。al。おそらく大規模な作業が必要になります。


私はこのソリューションが非常に好きで、実装が簡単で、ランダムな識別率よりも優れていると思います
Tom Gullen

これは質問です。コピーが別の解像度で保存されている場合は機能しますか?
belisarius博士、2013

4

考えられるすべての向きとネガティブバージョンにアプローチを適用したいのであれば、画像認識の良いスタートは(信頼性が高い)eigenfacesを使用することです:http : //en.wikipedia.org/wiki/Eigenface

別のアイデアは、両方の画像をコンポーネントのベクトルに変換することです。これを行うには、各次元の値を(x、y)ピクセル値に適用して、x * y次元(xは画像の幅、yは高さ)で動作するベクトルを作成するのが良い方法です。次に、K-Nearest Neighborのバリアントを実行します。一致するものと一致しないものの2つのカテゴリがあります。元の画像に十分に近い場合は一致カテゴリに収まりますが、そうでない場合は一致しません。

Kニアレストネイバーズ(KNN)はここにあります。Webでも他の良い説明があります。http//en.wikipedia.org/wiki/K-nearest_neighbor_algorithm

KNNの利点は、元の画像と比較するバリアントが多いほど、アルゴリズムが正確になることです。欠点は、最初にシステムをトレーニングするために画像のカタログが必要なことです。


1
良いアイデアですが、データに顔が含まれている場合のみです。また、状況ではなく人を識別します。したがって、複数の出版物に登場するプロの俳優は、多くの誤検知を生成します。
トムグレン

私があなたの使用意図を誤解しない限り
トムガレン

実際、アルゴリズムは主題に関係なく機能するので、ツリーを比較する場合にも役立ちます。それは古典的に顔認識に関連付けられているため、たまたまEigenfacesと呼ばれます。検索対象のアイテムが、比較するアイテムと同じ全体的な機能を備えている限り、機能します。
Nick Udell 2010

前のコメントに追加するには長すぎます:また、Eigenfacesは、画面上の顔だけでなく、画像全体を比較します。ウィキペディアの例では、従来のアプリケーションは顔認識であり、顔だけが有用であるため、トリミングされた顔のみを使用します。あなたの俳優が別の位置に現れた場合、別のフラグが立てられます。
Nick Udell

1
生のピクセル値に直接 KNN 適用することも、多くの助けになるとは思いません。小さな平行移動/回転は、特に画像に鮮明なコントラストや細い線が含まれている場合、通常、生のピクセル値に大きな違いをもたらします。そのため、同じ画像の任意に変換されたバージョンは、その空間では互いにあまり接近しておらず(クラスターに分類されません)、KNNはあまり機能しません。ただし、画像のヒストグラムや、画像の変換不変の表現でうまく機能すると思います。
Niki

1

画像の違法コピーを検出するために別のアプローチを完全に検討する場合は、透かしを入れることを検討してください。(1.4から)

...著作権情報を品質を損なうことなくデジタルオブジェクトに挿入します。デジタルオブジェクトの著作権が疑わしい場合は常に、この情報が抽出されて正当な所有者が識別されます。元の購入者のIDを著作権所有者のIDとともにエンコードすることもできます。これにより、許可されていないコピーを追跡できます。

これも複雑なフィールドですが、全体的な画像の変更を通じて透かし情報を保持できるようにする手法があります(1.9以降)。

...適切な強度の信号変換では透かしを削除できません。したがって、ウォーターマークを削除しようとする海賊は、商業的に興味が持てないほど文書をデベースしない限り成功しません。

もちろん、FAQはこのアプローチの実装を呼びかけています:「...非常に挑戦的」ですが、成功した場合、可能性のパーセンテージではなく、イメージがコピーであるかどうかについて高い信頼を得ます。


大量の編集後に透かしがどのように保持されるかについての詳細情報はありますか?とても面白いですね。
トムガレン

0

Linuxを実行している場合、2つのツールをお勧めします。

パッケージhugin-toolsのalign_image_stack-回転、スケーリング、その他の歪みを自動的に修正できるコマンドラインプログラムです(主にHDR写真の合成を目的としていますが、ビデオフレームやその他のドキュメントでも機能します)。詳細:http : //hugin.sourceforge.net/docs/manual/Align_image_stack.html

imagemagickパッケージからの比較-2つの画像の異なるピクセルの量を見つけてカウントできるプログラム。:ここではきちんとしたチュートリアルですhttp://www.imagemagick.org/Usage/compare/ エラー耐性を高めることができ-fuzz Nの%をuisingが。Nが高いほど、2つのピクセルを同じものとしてカウントするための許容誤差が大きくなります。

align_image_stackはオフセットを修正する必要があるため、compareコマンドは実際に同じピクセルを検出する可能性があります。

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