我們有一個圖像數據庫,其中我使用Dr. Neal Krawetz's method來計算PHASH,如David Oftedal所示。使用SOLR計算兩個長度之間的「相似度」/「位數」
的示例代碼部分計算這些多頭的區別就在這裏:
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 + "%");
的挑戰是,我只知道這些散列之一,我想查詢SOLR找到其他哈希以相似度順序。
的幾個注意事項:
- 使用SOLR這裏(只有我的選擇是HBASE)
- 想要避免安裝任何定製Java到Solr的(高興地安裝現有的插件)
- 快樂做大量的前期處理的C#
- 樂於使用多個字段,以數據存儲爲一個位串,長等
- 使用SOLRNet作爲客戶端
編輯,一些額外的信息(道歉我陷入了問題,並開始假設它是一個廣爲人知的領域)。這裏是一個直接下載到C#控制檯/樣品應用程式:http://01101001.net/Imghash.zip
此控制檯應用程序的一個例子輸出將是:
004143737f7f7f7f phash試驗001.JPG
0041417f7f7f7f7f phash - 測試 - 002.JPG
相似度:95.3125%
如果比較,你可以給兩個哈希值和期望的結果嗎?我對PHASH不太熟悉。 – cheffe
@cheffe添加了一些關於PHASH的信息,基本上它將一個圖像變成一個無符號的long/uint64,並對結果進行位計數以確定相似性。讓我知道如果還有什麼不清楚的地方! – CameraSchoolDropout