102

1 つのアプリケーション (Web ページの可能性があります) のスクリーンショットと以前に撮影したスクリーンショットを比較して、アプリケーションが正しく表示されているかどうかを判断したいと考えています。アスペクトが少し異なる可能性があるため (Web アプリの場合、ブラウザーによっては、一部の要素がわずかに異なる場所にある可能性があります)、完全一致の比較はしたくありません。スクリーンショットがどの程度似ているかを測定する必要があります。

すでにそれを行うライブラリ/ツールはありますか? どのように実装しますか?

4

17 に答える 17

77

これは、アルゴリズムをどれだけ賢くしたいかによって異なります。

たとえば、次のような問題があります。

  • トリミングされた画像とトリミングされていない画像
  • テキストが追加された画像とテキストが追加されていない画像
  • 鏡像

これについて私が見た中で最も簡単で単純なアルゴリズムは、各画像に対して次の手順を実行するだけです。

  1. 64x64 や 32x32 などの小さなサイズにスケーリングし、縦横比を無視し、最も近いピクセルではなく結合スケーリング アルゴリズムを使用します。
  2. 最も暗い色が黒で最も明るい色が白になるように、色の範囲を調整します
  3. 最も明るい色が左上になり、次に右上が次に暗くなり、左下が次に暗くなるように画像を回転および反転します(もちろん可能な限り)

編集結合スケーリング アルゴリズムは、10 ピクセルを 1 に縮小するときに、10 ピクセルすべての色を取得してそれらを 1 つに結合する関数を使用して実行するアルゴリズムです。平均化、平均値、または双 3 次スプラインなどのより複雑なアルゴリズムで実行できます。

次に、2 つの画像間のピクセル単位の平均距離を計算します。

データベースで一致する可能性のあるものを検索するには、ピクセルの色をデータベースの個々の列として保存し、それらの束 (非常に小さな画像を使用しない限り、すべてではありません) にインデックスを付け、それぞれの範囲を使用するクエリを実行します。ピクセル値、つまり。小さな画像のピクセルが、検索したい画像の -5 から +5 の間にあるすべての画像。

これは実装が簡単で、かなり高速に実行できますが、もちろん、ほとんどの高度な違いを処理することはできません。そのためには、はるかに高度なアルゴリズムが必要です。

于 2008-08-25T13:53:36.627 に答える
33

これを測定する「古典的な」方法は、画像を標準的な数のセクション (たとえば 10x10 グリッド) に分割してから、各セル内の RGB 値のヒストグラムを計算し、対応するヒストグラムを比較することです。このタイプのアルゴリズムは、その単純さと、スケーリングおよび (小さな!) 変換に対する不変性の両方のために好まれます。

于 2008-08-25T19:18:41.980 に答える
27

正規化されたカラー ヒストグラムを使用します。(こちらのアプリケーションに関するセクションをお読みください)、これらは画像検索/照合システムで一般的に使用されており、非常に信頼性が高く、比較的高速で、実装が非常に簡単な画像照合の標準的な方法です。

基本的に、カラー ヒストグラムはイメージのカラー分布をキャプチャします。これを別の画像と比較して、色の分布が一致しているかどうかを確認できます。

このタイプのマッチングは、スケーリング (ヒストグラムが正規化されると)、および回転/シフト/移動などに対してかなり回復力があります。

画像がわずかに回転/シフトされている場合、大きな違いが報告される可能性があるため、ピクセルごとの比較は避けてください。

ヒストグラムは自分で生成するのは簡単ですが (ピクセル値にアクセスできると仮定して)、そうしたくない場合は、OpenCVライブラリがこの種の処理を行うための優れたリソースです。これは、 OpenCVを使用してヒストグラムを作成する方法を示すパワーポイント プレゼンテーションです。

于 2008-08-27T16:41:32.277 に答える
14

MPEG のようなビデオ エンコーディング アルゴリズムは、ビデオの各フレーム間の差分を計算しないので、デルタをエンコードするだけでよいのですか? ビデオ エンコーディング アルゴリズムがこれらのフレームの違いをどのように計算するかを調べることができます。

このオープン ソースの画像検索アプリケーションhttp://www.semanticmetadata.net/lire/を見てください。いくつかの画像類似アルゴリズムについて説明します。そのうちの 3 つは MPEG-7 標準からのものです: ScalableColor、ColorLayout、EdgeHistogram、および Auto Color Correlogram。

于 2008-09-16T20:29:32.093 に答える
13

の純粋な数学的アプローチを使用できますがO(n^2)、オフセットなどがないことが確実な場合にのみ役立ちます。(ただし、均一な色のオブジェクトがいくつかある場合でも、かなりうまく機能します。)

とにかく、アイデアは、2 つの行列の正規化された内積を計算することです。 C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2)).

この式は、実際には行列間の角度の「余弦」です (奇妙な)。類似度が大き​​いほど ( としましょう) 、Pij=QijC は 1 になり、それらが完全に異なる場合、 for every i,j Qij = 1(ゼロ除算を回避) としましょう。得る。(概算で: )。Pij = 255nxnnC=1/n^2

于 2011-07-23T14:55:47.413 に答える
8

そのためにはパターン認識が必要です。2 つの画像の小さな違いを判断するには、Hopfield ネットがかなりうまく機能し、実装も非常に簡単です。ただし、利用可能な実装はわかりません。

于 2008-08-25T13:00:13.137 に答える
7

ルビーソリューションはここにあります

readme から:

Phashion は、重複およびほぼ重複するマルチメディア ファイルを検出する pHash ライブラリ「知覚ハッシュ」の Ruby ラッパーです。

于 2011-09-22T20:51:06.927 に答える
4

ある画像を別の画像から減算し、結果の画像をgifのjpegとして圧縮し、ファイルサイズを類似度の尺度。

2 つの同一の画像がある場合、非常によく圧縮される白いボックスが表示されます。画像が異なるほど、表現が複雑になり、圧縮性が低下します。

おそらく理想的なテストではなく、おそらく必要以上に遅いですが、迅速で汚い実装として機能する可能性があります。

于 2008-08-25T13:04:38.540 に答える
3

オープン ソース ツールのfindimagedupesのコードを見るかもしれませんが、これは perl で記述されているように見えるため、解析がどれほど簡単かはわかりません...

私が気に入った findimagedupes ページを読むと、同じアルゴリズムの C++ 実装があることがわかります。おそらく、これは理解しやすいでしょう。

また、 gqviewも使用できるようです。

于 2008-08-25T13:09:06.517 に答える
2

Vaibhav のメモをさらに詳しく説明すると、huginはオープンソースの「自動ステッチャー」であり、この問題についてある程度の洞察が得られるはずです。

于 2008-08-25T13:16:33.817 に答える
2

あなたの質問に直接答えるつもりはありませんが、私はこれが起こるのを見てきました. Microsoft は最近PhotoSynthと呼ばれるツールを立ち上げました。このツールは、多数の画像 (縦横比が異なる可能性があります) の重複領域を特定するために非常によく似た処理を行います。

ブログに利用可能なライブラリまたはコード スニペットがあるかどうか疑問に思います。

于 2008-08-25T12:57:21.163 に答える
2

必要なことを (部分的に) 行う、コンテンツベースの画像検索用のソフトウェアがあります。すべての参照と説明はプロジェクト サイトからリンクされており、短いテキスト ブック (Kindle): LIREもあります。

于 2013-04-19T14:51:44.833 に答える
1

Beyond Compareには、画像のピクセルごとの比較があります。

ここに画像の説明を入力

于 2017-04-26T19:57:11.387 に答える
0

これがときどき行うもので、自動化する必要がない場合は、Photoshop や Paint Shop Pro (おそらく GIMP や Paint.Net もそうですが、私は.それらについてはよくわかりません)。両方のスクリーンショットを開き、一方をレイヤーとして他方の上に置きます。レイヤーのブレンド モードを [差] に変更すると、両者で同じものはすべて黒くなります。最上層を移動して、配置の違いを最小限に抑えることができます。

于 2008-10-15T15:15:47.650 に答える
-1

使用する本当に基本レベルの方法では、すべてのピクセルの色を調べて、2 番目の画像の対応するピクセルの色と比較することができますが、それはおそらく非常遅い解決策です。

于 2008-08-25T13:19:39.317 に答える