David Oftedalによって実装されたNeal Krawetz 博士の方法を使用して PHASH を計算した画像のデータベースがあります。
これらの long の差を計算するサンプル コードの一部は次のとおりです。
ulong hash1 = AverageHash(theImage);
ulong hash2 = AverageHash(theOtherImage);
uint BitCount(ulong theNumber)
{
uint count = 0;
for (; theNumber > 0; theNumber >>= 8) {
count += bitCounts[(theNumber & 0xFF)];
}
return count;
}
Console.WriteLine("Similarity: " + ((64 - BitCount(hash1 ^ hash2)) * 100.0) / 64.0 + "%");
課題は、これらのハッシュの 1 つしか知らないため、SOLR にクエリを実行して類似性の順に他のハッシュを見つけたいということです。
いくつかのメモ:
- ここでSOLRを使用します(私が持っている唯一の代替手段はHBASEです)
- カスタム Java を solr にインストールすることを避けたい (既存のプラグインをインストールしてよかった)
- C# で多くの前処理を実行できることを嬉しく思います
- 複数のフィールドを使用して、データをビット文字列や long などとして保存できます。
- SOLRNet をクライアントとして使用する
編集、いくつかの追加情報(問題に巻き込まれ、広く知られている領域であると想定し始めたことをお詫びします)。C# コンソール/サンプル アプリへの直接ダウンロードは次のとおりです: http://01101001.net/Imghash.zip
このコンソール アプリの出力例は次のようになります。
004143737f7f7f7f phash-test-001.jpg
0041417f7f7f7f7f phash-test-002.jpg
類似度: 95.3125%