圖片哈希概論及python中如何實現對比兩張相似的圖片


Google 以圖搜圖的原理,其中的獲取圖片 hash 值的方法就是 AHash。

每張圖片都可以通過某種算法得到一個 hash 值,稱為圖片指紋,兩張指紋相近的圖片可以認為是相似圖片。

以圖搜圖的原理就是獲取你上傳的圖片的指紋,和圖庫的圖片指紋對比,查找出最相似的若干張圖片展示。

除了以圖搜圖,圖片哈希還可以做什么呢?例如圖片檢索,重復圖片剔除,圖片相似度比較等等。

這種哈希算法大概有 4 種:

1,差值哈希:DHash(Difference Hash)
2,均值哈希:AHash(Average Hash)
3,感知哈希:PHash(Perceptual Hash)
4,小波哈希:WHash(Wavelet Hash)

注:常用的是前面三種,DHash、AHash、PHash。其中 PHash 是增強版的 AHash。

 

圖片基本概念

圖片是由像素點矩陣組成的,信息可保存在數組中,如下圖 4*4 的圖片,可保存在二維數組中:

左上角為起始點

row 表示行,對應圖片的高 height,y 方向

col 表示列,對應圖片的寬 width,x 方向

 

 

下面我只講下感知哈希算法的實現:

感知哈希(核心就是:離散余弦變換(DCT))

1,縮小尺寸,建議 32*32 2,灰度化 3,進行離散余弦變換(DCT) 4,取左上角的 8*8 的大小 5,計算平均值 6,比較像素的灰度 7,計算哈希值

 

PhotoHash 它是python中一個感知哈希算法,用來發現兩個圖像是否相似。

1,安裝包

pip install PhotoHash

2, average_hash

使用平均哈希算法返回圖像的哈希值。該算法將圖像中的每個像素與所有像素的平均值進行比較:

import photohash
hash_one = photohash.average_hash('123/dy.jpg')
print(hash_one)

hash_two = photohash.average_hash('123/6000.jpg')
print(hash_two)

結果:

1fffffd48000f0e1
0effff1b10001f02

3,distance

返回給定圖像的average_hash之間的漢明距離

import photohash
distance = photohash.distance('123/dy.jpg', '123/6000.jpg')
print(distance)

結果:
9

4,is_look_alike

返回一個布爾值,判斷照片是否相似

import photohash
similar = photohash.is_look_alike('123/dy.jpg', '123/6000.jpg')
print(similar)

結果:
True

import photohash
similar = photohash.is_look_alike('123/dy.jpg', '123/6000.jpg', tolerance=3)//is_look_alike還接受一個可選的寬容參數,該參數定義了比較的嚴格程度。
print(similar)

5,hash_distance

返回相同長度的兩個哈希之間的漢明距離

import photohash
hash_one = photohash.average_hash('123/dy.jpg')
hash_two = photohash.average_hash('123/6000.jpg')
distance = photohash.hash_distance(hash_one, hash_two)
print(distance)

結果:
5

6,hashes_are_similar

返回一個布爾值,表示兩個哈希值是否在給定的公差范圍內。與is_look_alike相同,但使用散列而不是圖像路徑

import photohash
hash_one = photohash.average_hash('123/dy.jpg')
hash_two = photohash.average_hash('123/6000.jpg')
similar = photohash.hashes_are_similar(hash_one, hash_two)
print(similar)

注:通常漢明距離 小於等於5時我們認為這兩張圖非常相似,大於10 則認為這兩張圖完全不一樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM