2011-03-10 63 views
3

我的圖像存儲服務器有一個非常大的問題。類似的圖像搜索解決方案

它上面有大約2,000,000個產品圖片,並且不斷增加,但其中很多都非常相似。例如:一張120 * 120,118 * 120,131 * 125等多種相似尺寸的iPad照片,他們在我的網站(庫中的相似圖片)上佔用了大量不必要的磁盤空間和不良用戶體驗。

這些圖片已收錄在數據庫中,我可以通過產品找到他們提供一些條件,比如,類別等。我需要找到一種方法,以紀念在數據庫中的這些類似的圖像,並刪除它們。

我所做的: 找到一個名爲pHash的庫可以計算兩個圖像的相似度,我可以用它來逐個計算圖像。但以這種方式,需要很長時間才能找到這些圖像。現在我不知道如何讓這個過程更快。

任何想法?

回答

3
  • 使用pHash計算所有圖像(的每個組合的雙重交叉不)的感知哈希,
  • 然後那種哈希(同時保持參考圖像),
  • 然後定義您定義爲「圖片等效」的感知哈希的臨界值,然後用參考您要保留的一張圖片替換對等圖片的引用。
+0

感謝@eznme,感性哈希是一個很好的選擇! – opps 2011-03-10 10:24:27

+0

您能否詳細說明我可以如何對散列值進行排序? – retiremonk 2016-01-28 17:23:02

3

你是對的,一個天真的算法將是O(n^2),因爲你在所有的n大小的數據集進行配對比較。

有一種稱爲blocking的技術,其實現爲canopy clustering,它可以通過將比較窗口大小劃分爲一組可能相似的'塊'來解決成對比較。

您可以通過提取和特徵向量排序(這我不知道如何在圖像做)羣集您的圖像。

然後,定義比較窗,W,使得瓦特<ñ。

然後應用一種稱爲sorted neighborhood method的技術,該技術將固定大小的w窗口依次移動到排序的記錄上。然後,窗口內的每個圖像與其「鄰居」配對,幷包含在候選記錄對列表中。

這基本上減少了比較複雜O(w * n),得到線性算法具有恆定w

執行比較後,您應該對匹配對進行傳遞閉包。

你造成對現在怎樣纔算similar圖像。

注意,這個算法是embarrassingly parallel