1. 程式人生 > >計算圖片相似度的多種解決方案

計算圖片相似度的多種解決方案

利用直方圖距離計算圖片相似度

計算公式:

直方圖計算公式

其中,G和S為兩張圖片的影象顏色分佈直方圖,N為顏色空間樣點數。

這裡使用分塊的方法計算相似度,用以提高各部分的特徵,防止圖片顏色相似導致計算的相似度高。

利用平均雜湊演算法計算圖片相似度

計算步驟:

  1. 縮放圖片:一般大小為8*8,64個畫素值
  2. 簡化色彩,轉化為灰度圖:可以使用Image的convert(‘L’)方法
  3. 計算平均值:計算出灰度圖所有畫素點的畫素值的平均值
  4. 比較畫素灰度值:遍歷灰度圖的每一個畫素值與上一步計算的平均值,大於平均值記錄為1,否則為0
  5. 得到64點陣圖像指紋
  6. 記錄兩張圖片的影象指紋的漢明距離,計算圖片相似度

利用感知雜湊演算法計算圖片相似度

計算步驟:

  1. 縮放圖片:一般大小為32*32,這樣方便DCT計算
  2. 簡化色彩,轉化為灰度圖:可以使用Image的convert(‘L’)方法
  3. 獲得影象的二維資料矩陣f(x,y)

    求離散餘弦變換的係數矩陣[A]

    求係數矩陣對應的轉置矩陣[A]T

    根據公式[F(u,v)]=[A][f(x,y)][A]T 計算離散餘弦變換

  4. 縮小DCT:DCT計算後的矩陣是32*32,保留左上角的8*8,這些代表的圖片的最低頻率

  5. 計算平均值:計算縮小DCT後的所有畫素點的平均
  6. 進一步減小DCT:大於平均值記錄為1,否則為0
  7. 得到64位資訊指紋
  8. 記錄兩張圖片的影象指紋的漢明距離,計算圖片相似度

利用差異雜湊演算法計算圖片相似度

計算步驟:

  1. 縮放圖片:一般大小為9*8,以留下多一行的畫素資料進行差異計算
  2. 簡化色彩,轉化為灰度圖:可以使用Image的convert(‘L’)方法
  3. 計算差異值:dHash演算法工作在相鄰畫素之間,這樣每行9個畫素之間產生了8個不同的差異,一共8行,則產生了64個差異雜湊值
  4. 得到64位資訊指紋:如果左邊的畫素比右邊的更亮,則記錄為1,否則為0
  5. 記錄兩張圖片的影象指紋的漢明距離,計算圖片相似度