9

2つの画像を比較して、一方が他方のサイズ変更されたバージョンであるかどうかを確認するための既存のアルゴリズム/ライブラリ/フレームワークがあるかどうか疑問に思っていますか?この段階では、プログラミング言語は重要ではありません。

そこに何もないなら、私は何かを書く必要があるでしょう。私がこれまでに考えたこと:

  • (高価)大きい方から小さい方にサイズを変更し、ピクセルごとに比較します。

  • さらに良いことに、画像上のいくつかのランダムな「領域」のサイズを変更して比較するだけです。それらが一致する場合は、さらに変換するなど...

  • 画像をいくつかの行と列に分割し、色の値に対してある種のパリティ計算を実行します。

特に最初の2つのアイデアで私が目にする問題は、そもそも画像のサイズを変更する方法が異なるため、計算がまったく同じように機能しない可能性があることです。一部のサイズ変更により、ぼかしなどが追加されます。

誰かが私にこの主題に関するいくつかの良い文献を指摘することができれば、それは素晴らしいことです。私のグーグルは主にシェアウェアアプリケーションになりますが、これは私が望んでいるものではありません。

目標は、これをWebサーバーの背後で実行することです。

4

2 に答える 2

2

最善のアプローチは、比較する画像の特性、画像が同じである確率のパーセンテージ、および画像が異なる場合、通常は大幅にずれているか、1ピクセル程度の微小なものであるかによって異なります。違い?

上記の答えが、比較する必要のある画像が完全にランダムであるということである場合は、高価なソリューションを使用するか、利用可能なパッケージが最善の策である可能性があります。

画像が頻繁に異なることがわかっていて、画像は通常かなり大きく異なることがわかっていて、ソリューションを実際に手作業でロールしたい場合は、最初の「クイック比較」手順を実装できます。高価であり、画像が異なる多くのケースをすばやく特定できます。

たとえば、大きい方の画像のサイズを変更してから、ピクセルごとに比較(またはピクセル値のハッシュを計算)して、画像の「対角線」(左上のピクセルから右下のピクセル)のみを比較し、除外することができます。異なる画像であり、このテストに合格した画像に対してのみ、より高価な比較を行います。

または、画像のタイプに応じて「良好な分布」であるものに事前設定された数のポイントを取り、このテストに合格したものに対してのみより高価な比較を行います。

比較する画像についてよく知っている場合、それらは既知の特性を持っており、同じものよりも頻繁に異なるため、上記の線に沿って安価な「クイック除去比較」を実装することは価値があります。

于 2012-10-26T18:56:03.687 に答える
1

これについては、dHash アルゴリズムを調べる必要があります。

この数日前のためだけに、純粋な Java ライブラリを作成しました。ディレクトリパス(サブディレクトリを含む)を入力すると、削除する絶対パスを含む重複画像がリストに表示されます。または、ディレクトリ内のすべての一意の画像を検索するためにも使用できます。

内部で awt api を使用しているため、Android では使用できません。imageIO には多くの新しいタイプの画像の読み取りに問題があるため、内部で使用される 12 匹のサルの jar を使用しています。

https://github.com/srch07/Duplicate-Image-Finder-API

依存関係が内部的にバンドルされた Jar は、 https://github.com/srch07/Duplicate-Image-Finder-API/blob/master/archives/duplicate_image_finder_1.0.jarからダウンロードできます。

API は、異なるサイズの画像間でも重複を見つけることができます。

于 2016-01-26T17:45:54.447 に答える