假設圖庫中有10,000張JPEG,PNG圖像,如何找到所有圖像具有類似調色板的圖像,並按照相似性降序排列?使用Python查找帶有類似顏色調色板的圖像
回答
爲每個圖像構建顏色直方圖。然後,當您想要將圖像與集合進行匹配時,只需根據其直方圖與選定圖像的直方圖的接近程度對列表進行排序即可。
桶的數量取決於你想要的精度。組合成一個存儲桶的數據類型將定義您如何優先搜索。
例如,如果你最感興趣的色調,那麼你可以定義鬥圖像的每個像素進入爲:
def bucket_from_pixel(r, g, b):
hue = hue_from_rgb(r, g, b) # [0, 360)
return (hue * NUM_BUCKETS)/360
如果你也想一般的匹配,那麼你就可以根據完整的RGB值選擇存儲桶。
使用PIL,您可以使用內置histogram
函數。可以使用任何您想要的距離度量來計算「貼近度」直方圖。例如,L1距離可以是:
hist_sel = normalize(sel.histogram())
hist = normalize(o.histogram()) # These normalized histograms should be stored
dist = sum([abs(x) for x in (hist_sel - hist)])
的L2將是:
dist = sqrt(sum([x*x for x in (hist_sel - hist)]))
Normalize
只是迫使直方圖的總和等於某一常數的值(1.0正常工作)。這很重要,因此可以將大圖像與小圖像進行正確比較。如果你打算使用L1距離,那麼你應該使用normalize
中的L1度量。如果L2,那麼L2。
@Frank,謝謝你的建議。你能給我一些Python代碼示例嗎? PIL的內置直方圖()函數返回一個列表,如何確定兩個圖像的直方圖有多接近? – jack 2009-11-10 00:18:17
@Frank,看起來像是在10,000個候選人中選擇具有相似直方圖的圖像時需要進行10,000個距離計算?是否有可能將數值與每個圖像相關聯並將它們存儲在數據庫中,因此可以將比較簡化爲一些sql查詢? – jack 2009-11-10 01:55:41
@jack,10,000計算並不那麼昂貴。像這樣加速代碼的最佳方式不是將直方圖減少爲整數(不能按照您的想法完成),而是簡單**緩存**結果。緩存數據庫中的排序順序(每個圖像)或將其緩存在內存中。確保您還將直方圖存儲在數據庫或內存中,以便重建這些排序順序緩存並不昂貴。 – 2009-11-10 02:07:34
您的問題已經得到解答。看看這些SO答案:
應該是一個評論... – ChristopheD 2009-11-10 00:25:55
我不會說它已被回答。他被困在PIL-land。 – 2009-11-10 00:36:41
- 1. 使用Python尋找顏色的色調?
- 2. 查找顏色接近colorBrewer調色板的顏色名稱
- 3. 查找基於最佳的圖像相似的調色板
- 4. 使用調色板中的所有顏色色板
- 5. 如何繪製帶有顏色色調的緩衝圖像
- 6. 將圖像轉換爲帶有JS的線性調色板,丟失顏色
- 7. 使用調色板更改圖像按鈕顏色
- 8. 使用調色板時查找分配給ASP.NET餅圖中的點的顏色
- 9. Python - 查找類似的顏色,最好的方法
- 10. 餅圖中的調色板顏色
- 11. 查找Python中圖像像素和調色板顏色差異的最快方法
- 12. 從真彩色圖像轉換爲調色板顏色
- 13. 使用python更改顏色的色調
- 14. 使用Python的圖像顏色檢測
- 15. 查找圖像的平均顏色
- 16. 在圖像中查找相似顏色的區域
- 17. Python - 檢查圖像中心的顏色
- 18. Seaborn圖表顏色與調色板指定的顏色不同
- 19. 用python計算類似顏色
- 20. PHP GD:用色調顏色乘以圖像顏色
- 21. 查找像素顏色
- 22. 搜索顏色,有調色板
- 23. JavaScript中顏色量化/縮小圖像調色板的算法?
- 24. 使用調色板從TIFF獲取像素顏色索引
- 25. c#尋找類似的顏色
- 26. 使用javascript和HTML5 canvas以指定的顏色着色或替換紋理圖像的顏色。類似於PS
- 27. 獲得從調色板圖像RGB顏色和適用於二值圖像
- 28. 顏色選擇器(調色板)顯示所有顏色
- 29. RibbonWindow Office 2007黑色主題的調色板(使用的顏色)?
- 30. 如何將圖像調色板減少爲特定顏色?
可能重複:http://stackoverflow.com/questions/593925/how-do-i-find-images-with-a -similar-color-using-python-and-pil – ChristopheD 2009-11-10 00:08:30
是的,但在這個問題上沒有很好的答案。 :-) – 2009-11-10 00:35:49
這裏有很多類似的討論: http://stackoverflow.com/questions/1034900/near-duplicate-image-detection/1048723#1048723 – Paul 2009-11-10 00:40:11