画像のジオハッシュ方法を見つけようとしています。可能な画像の空間は緯度/経度よりもはるかに高い次元であるため、難しいです。(ジオハッシュは場所を文字列に変換し、文字列は場所を徐々に絞り込みます)
だから、私が必要とするのは次のようなものです:
- 入力: ディスク上の JPG または PNG 画像のリスト
- 出力: 各画像の文字列2 つの画像に共通する文字列プレフィックスが長いほど、2 つの画像が同じである可能性が高くなります。
完璧である必要はなく、トリミングされた画像や大幅に調整された画像などの極端なケースを処理する必要もありません。これは、異なる解像度と圧縮レベルで同じ画像を複数コピーすることを目的としています。
私は使用できません:
- ファイルまたは画像データのハッシュ。2 つの画像間のわずかな変更でも完全に異なるハッシュが作成され、近接性が得られないためです。
- N 対 N の比較ではないため、画像の減算。
ウェーブレット圧縮またはラプラシアン/ガウス ピラミッドを試すために他の回答を読みましたが、Java または Python で実装する方法がわかりません。しかし、私は進歩しました!
- データを破棄しないように、 http: //today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html を使用して 32x32 にサイズ変更します。すべてが正方形に変わります。
- 2x2 まで、連続して小さいサムネイルのピラミッドを作成します。
- 2x2 で、「次のピクセルは現在のピクセルよりも明るいですか?」という文字列をエンコードします。そうであれば 1、そうでなければ 0 です(これによりすべての色相と彩度が破棄されます。何らかの形で色相を使用したい場合があります)。
- 8x8 および 32x32 ピラミッドから連続する 2 進数をエンコードする
- 大きな 2 進数を、Base62 などのより高い基数表現に変換します。
これはうまくいきそうです!圧縮またはカラー バランスによる小さな違いは、「この領域の左側が右側より明るいか」を変更するのに十分ではありません。しかし、私は車輪を再発明していると思います.ある種のプログレッシブエンコーディングの方が良いでしょうか? SIFT やその他の機能検出はやり過ぎです。クロッピングや回転を処理できる必要はありません。