すべての画像を他のすべての画像と非常に高速に比較するには、多くの画像 (既存の約 100.000、1 日あたり 1000 の新規、RGB、JPEG、最大サイズ 800x800) のフィンガープリントを作成する必要があります。ほぼ類似している画像も認識される必要があるため、バイナリ比較メソッドは使用できません。
既存のライブラリが最適ですが、既存のアルゴリズムへのいくつかのヒントも大いに役立ちます。
すべての画像を他のすべての画像と非常に高速に比較するには、多くの画像 (既存の約 100.000、1 日あたり 1000 の新規、RGB、JPEG、最大サイズ 800x800) のフィンガープリントを作成する必要があります。ほぼ類似している画像も認識される必要があるため、バイナリ比較メソッドは使用できません。
既存のライブラリが最適ですが、既存のアルゴリズムへのいくつかのヒントも大いに役立ちます。
通常のハッシュまたは CRC 計算アルゴリズムは、画像データではうまく機能しません。情報の次元的な性質を考慮に入れる必要があります。
アフィン変換 (スケーリング、回転、平行移動、反転) が考慮されるような非常に堅牢なフィンガープリンティングが必要な場合は、画像ソースでラドン変換を使用して、画像データの規範的なマッピングを生成できます。これを各画像と一緒に保存し、次に、指紋だけを比較します。これは複雑なアルゴリズムであり、気弱な人向けではありません。
いくつかの簡単な解決策が可能です:
明度ヒストグラム (特に RGB コンポーネントに分離されたもの) は、画像の合理的なフィンガープリントであり、非常に効率的に実装できます。あるヒストグラムを別のヒストグラムから差し引くと、2 つの画像がどの程度似ているかを判断するために処理できる新しいヒストグラムが生成されます。輝度/色情報の分布と発生のみを評価するため、ヒストグラムはアフィン変換を非常にうまく処理します。各色成分の明度情報を 8 ビット値まで量子化すると、ほぼすべての妥当なサイズの画像のフィンガープリントには 768 バイトのストレージで十分です。明度ヒストグラムは、画像の色情報が操作されると偽陰性を生成します。コントラスト/明るさ、ポスタリゼーション、カラーシフト、明度情報の変更などの変換を適用すると。
スケーリングされた画像を使用することは、画像の情報密度を比較しやすいレベルにまで下げるもう 1 つの方法です。元の画像サイズの 10% 未満に縮小すると、一般的に使用できないほど多くの情報が失われます。そのため、800x800 ピクセルの画像を 80x80 に縮小しても、適切なフィンガープリンティングを実行するのに十分な情報を提供できます。ヒストグラム データとは異なり、ソース解像度の縦横比が異なる場合は、画像データの異方性スケーリングを実行する必要があります。つまり、300x800 の画像を 80x80 のサムネイルに縮小すると、画像が変形し、300x500 の画像 (非常に似ています) と比較すると、偽陰性が発生します。アフィン変換が関係している場合、サムネイルの指紋もしばしば偽陰性を生成します。画像を反転または回転すると、
両方の手法を組み合わせることは、賭けをヘッジし、偽陽性と偽陰性の両方の発生を減らすための合理的な方法です。
ここで提案されている、一般的な趣向を維持しながら、何が起こっているかについてより厳密な数学的根拠を提供する、縮小された画像の亜種よりもはるかにアドホックではないアプローチがあります。
イメージのHaar ウェーブレットを取得します。基本的に、Haar ウェーブレットは、低解像度の画像から高解像度の各画像への一連の違いですが、ミップマップの「ツリー」の深さによって重み付けされます。計算は簡単です。次に、Haar ウェーブレットを適切に重み付けしたら、k 個の最大係数 (絶対値に関して) を除くすべてを破棄し、ベクトルを正規化して保存します。
これらの正規化されたベクトルの 2 つの内積を取ると、1 がほぼ同一である類似性の尺度が得られます。ここに詳細情報を掲載しました。
ずっと前に、私はいくつかの同様の特性を持つシステムに取り組みました。これは、私たちが従ったアルゴリズムの近似です。
したがって、画像ごとにn + 1整数値を保存します。ここnで、は追跡しているゾーンの数です。
比較のために、各カラーチャンネルを個別に確認する必要もあります。
これにより、一致しない画像をすばやく破棄できます。より多くのゾーンを使用したり、アルゴリズムを再帰的に適用して、一致の信頼性を高めることもできます。
Ic の回答と同様に、複数の解像度で画像を比較してみてください。したがって、各画像は 1x1、2x2、4x4 .. 800x800 として保存されます。最低解像度が一致しない場合 (しきい値に従って)、すぐに拒否できます。一致する場合は、次に高い解像度で比較できます。
また、画像が医療画像などの類似の構造を共有している場合、その構造を抽出して、比較がより簡単/高速な説明にすることができる場合があります。
2015 年現在 (バック トゥ ザ フューチャー... この 2009 年の質問で、現在 Google で上位にランクされています) 画像の類似性は、ディープ ラーニング技術を使用して計算できます。自動エンコーダーとして知られるアルゴリズムのファミリーは、類似性を検索可能なベクトル表現を作成できます。ここにデモがあります。
文字通りすべての画像を他の画像と比較したいですか? アプリケーションとは何ですか? たぶん、特定の記述子に基づいた画像のインデックス作成と検索が必要なだけでしょうか? 次に、たとえば、マルチメディア コンテンツ記述インターフェイスの MPEG-7 標準を見ることができます。次に、さまざまな画像記述子を比較できます。これは、それほど正確ではありませんが、はるかに高速です。
そこで、「画像照合」とはかなり異なる「指紋照合」を行いたいとします。Fingerprints の分析は過去 20 年間に深く研究され、いくつかの興味深いアルゴリズムが開発され、適切な検出率 ( FARおよびFRR測定に関して - False Acceptance RateおよびFalse Rejection Rate ) を確保するために開発されました。
主に特徴点検査に基づいて構築された、LFA (局所特徴分析)クラスの検出手法をよく検討することをお勧めします。特徴点は指紋の特定の特徴であり、いくつかのクラスに分類されています。ラスター画像を特徴点マップにマッピングすることは、実際にほとんどの公的機関が犯罪者やテロリストをファイルするために行っていることです。
その他の参考資料はこちら
iPhone の画像比較と画像類似度の開発については、 http ://sites.google.com/site/imagecomparison/ をご覧ください。
実際の動作を確認するには、iTunes AppStore の eyeBuy Visual Search をチェックしてください。
特殊な画像ハッシュ アルゴリズムは活発に研究されている分野のようですが、おそらく画像バイトの通常のハッシュ計算でうまくいくでしょう。
同じソースに由来するが、異なる形式または解像度である可能性がある画像を探すのではなく、バイトが同一の画像を探していますか (これはかなり難しい問題だと思います)。