圖片相似度比較--算法

    最近由於要租房,所以下載了58同城的APP,在找個人房源過程中發現,58同城會把圖片相似的發帖紀錄被標誌出來,並警告用戶此信息可能是假的。這裏不討論58同城的這方面做得人性化。而是就圖片相似度算法來做一下分析。

    百度和谷歌都推出了“以圖搜圖”的功能,至今都沒用過,也是挺無語的……

    最近翻閱了這方面的資料,屬“感知哈希算法”最爲成熟,“感知哈希算法”的作用是對每張圖片生成一個指紋字符串,然後比較不同圖片的指紋。結果越接近,說明圖片越相似。下面就簡單介紹一下此算法

  • 縮小圖片尺寸

    將圖片縮小到8*8的尺寸,總共64個像素。這一步的作用是去除圖片的細節,只保留結構、明暗等基本信息,摒棄不同尺寸、比例帶來的圖片差異。

    用漢明距離進行圖片相似度檢測的Java實現 用漢明距離進行圖片相似度檢測的Java實現

  • 簡化色彩

    將縮小後的圖片,轉爲64級灰度。也就是說,所有像素點總共只有64中顏色

  • 計算平均值

    計算所有64個像素的灰度平均值

  • 比較像素灰度

    將每個像素的灰度,與平局值進行比較。大於或等於平局值,記爲1;小於平均值記爲0

  • 計算哈希值

    將上一步比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖片的指紋。組合的次序並不重要,只要保證所有圖片都採用同樣的次序就好了。

    用漢明距離進行圖片相似度檢測的Java實現 = 用漢明距離進行圖片相似度檢測的Java實現 = 8f373714acfcf4d0

得到指紋以後,就可以對比不同的圖片,看看64位中有多少是不一樣的。在理論上,這等同於計算漢明距離。如果不相同的數據位超過5位,就說明兩張圖片很相似;如果結果大於10,就說明這是不同的圖片。

具體詳情請查看博客:圖片相似度算法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章