1. 程式人生 > >計算兩張圖片相似度的方法總結

計算兩張圖片相似度的方法總結

title rac 相似度 無法 tween hive any 明顯 embed

技術分享

python工具包-pyssim

簡介

python工具包,用來計算圖像之間的結構相似性 (Structural Similarity Image Metric: SSIM)。結構相似性介紹詳見:https://zh.wikipedia.org/wiki/%E7%B5%90%E6%A7%8B%E7%9B%B8%E4%BC%BC%E6%80%A7

使用

安裝:sudo pip install pyssim

源碼:https://github.com/jterrace/pyssim

使用示例: pyssim image1 image2 返回一個-1~1之間的實數,代表兩張圖片的結構相似。更多參數詳見git中的介紹。

評價

該方法能對兩張圖片的相似度進行一個大致的區分,它的計算基於兩張圖片的亮度、對比度和結構。但是對於有的圖片,比如下面兩個,它完全無法捕捉到它倆都是護照的信息,此方法計算的這兩張圖片的相似度接近於0。該方法更常用來衡量一張圖片壓縮後的失真度。

技術分享技術分享

cosin相似度

簡介

把圖片表示成一個向量,通過計算向量之間的余弦距離來表征兩張圖片的相似度。

使用

github上源碼:https://github.com/hirobert/python-image-similarity

實現細節:首先會將兩張圖片縮小到相同的規格,一來可以減少運算量,二來大小不同的圖片的表示向量沒法直接點乘。向量每一維的值為對應像素點RGB值的平均。

評價

即使縮小了圖片,求範數和點積的運算量仍然很大,速度明顯比使用pyssim方法慢。但是直觀感覺計算的結果比pyssim更靠譜。

除了使用余弦相似度,還可以使用別的評價指標來表征兩個向量之間的相似度。詳見以下鏈接:http://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html

基於直方圖

簡介

直方圖能夠描述一幅圖像中顏色的全局分布,是一種入門級的圖像相似度計算方法。

使用

原理介紹及源碼參考:http://blog.csdn.net/gzlaiyonghao/article/details/2325027 http://www.ruanyifeng.com/blog/2013/03/similar_image_search_part_ii.html

評價

過於簡單,只能捕捉顏色的相似性,捕捉不到更多的信息。比如以下兩張圖片:

技術分享技術分享

由於二者顏色分布相似,所以判定二者相似度較高,顯然不合理。

基於互信息(Mutual Information)

簡介

通過計算兩個圖片的互信息來表征它們之間的相似度。

使用

可以借助medpy來計算互信息,詳見:http://pythonhosted.org/MedPy/_modules/medpy/metric/image.html

medpy是個基於python的醫學影像處理工具,提供計算圖像之間的互信息的接口。

評價

這種方式,如果兩張圖片尺寸相同,還是能在一定程度上表征兩張圖片的相似性的。但是,大部分情況下圖片的尺寸不相同,如果把兩張圖片尺寸調成相同的話,又會讓原來很多的信息丟失,所以很難把握。經過實際驗證,此種方法的確很難把握。

計算圖像“指紋信息”

簡介

將圖片歸一化成一定大小,計算一個序列作為它的指紋信息,然後比較兩張圖片指紋信息序列相同的位數。如果不相同的數據位不超過5,就說明兩張圖片很相似;如果大於10,就說明這是兩張不同的圖片。

使用

一個簡單的實現:http://www.ruanyifeng.com/blog/2011/07/imgHash.txt

評價

使用上面的簡單實現幾乎沒什麽效果。當然上面的實現略顯粗糙,圖片被壓縮得很小。

基於模式識別的方法

  • Learning Fine-grained image similarity with deep ranking (2014) https://users.eecs.northwestern.edu/~jwa368/pdfs/deep_ranking.pdf
    提出一種基於深度學習的圖片評級模型,不僅能很好地區分類內圖片和類外圖片,而且對於類內圖片也能有一個相似度級別的區分。
  • On the Euclidean distance of images http://ieeexplore.ieee.org/document/1453520/
    一種針對圖片的歐幾裏得距離計算方法,可以用來匹配圖像相似度。(PS:沒有找到實現)

網上有價值的討論鏈接

  • 谷歌圖像搜索原理:https://www.zhihu.com/question/19726630
  • How can we measure similarities between two images? https://www.researchgate.net/post/How_can_we_measure_similarities_between_two_images

總結

如果不使用基於模式識別的方法,以上所述多種方法都可以大致比較兩張圖片的相似性。但是以上各方法的效果也很大程度上依賴於許多具體實現細節,由於沒有一個衡量尺度,所以很難比較各方法的優劣。

計算兩張圖片相似度的方法總結