我想弄清楚圖像的地理哈希方法。這很難,因爲可能的圖像的空間比lat/lng要高得多。 (地理哈希的位置轉換爲字符串,其中字符串逐步細化的位置)N張圖片之間的距離:遞增! (相同的作物,但重新壓縮/調整)
所以,我需要的是一些:
- 輸入:JPG或PNG圖像的磁盤 名單
- 輸出:對於每個圖像,一個字符串在哪裏任意兩個圖像之間的字符串前綴的公共長度越長,這兩個圖像相同的可能性就越大。
它不需要完美,它不需要處理極端情況,如裁剪圖像或嚴重調整的圖像。它旨在用於不同分辨率和壓縮級別的同一圖像的多個副本。
我不能使用:
- 文件或圖像數據散列,因爲兩個圖像之間甚至一個很小的變化使得一個完全不同的哈希值,你沒有得到任何接近
- 圖像相減,因爲它不會是一個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金字塔的連續二進制數進行編碼
- 將較大的二進制數轉換爲Base62等較高的基數表示形式。
這似乎工作得很好!與壓縮或色彩平衡的細微差異不足以改變「該區域的左側比右側更亮」。但是,我認爲我正在重新發明輪子,某種漸進式編碼可能會更好? SIFT和其他功能檢測是過度殺傷,我不需要能夠處理裁剪或旋轉。
我不知道我是否理解了這個問題,你輸入一個字符串,它的字符可以用來漸進地細化圖片? – 2011-12-27 18:00:05
澄清問題 – 2011-12-27 19:19:53
實際上,用灰度「更亮或更暗」的方法獲得相當不錯的結果!將更新最終結果 – 2012-01-06 23:25:59