九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
感知哈希 ,平均哈希,差異值哈希

感知哈??梢杂脕砼袛鄡蓚€圖片的相似度,通常可以用來進(jìn)行圖像檢索。

感知哈希算法對每一張圖片生成一個“指紋”,通過比較兩張圖片的指紋,來判斷他們的相似度,是否屬于同一張圖片。

常用的有三種:平均哈希(aHash),感知哈希(pHash),差異值哈希(dHash)

算法步驟

他們的步驟都類似:

平均哈希

1.圖片縮放,一般為8*8,或者32*32

2.將圖片灰度化

3.求平均值,并根據(jù)平均值將每一個像素二值化

4.將8*8=64位bit,每8個比特為一個十六進(jìn)制值,轉(zhuǎn)換成字符串,生成哈希值(指紋)

感知哈希

1.圖片縮放 為32*32大小

2.將圖片灰度化

3.對圖片進(jìn)行離散余弦變換(DCT),轉(zhuǎn)換的頻域

4.取頻域左上角8*8大小(圖片的能量都集中在低頻部分,低頻位于左上角)

5.計(jì)算平均值,并根據(jù)平均值二值化(同平均哈希)

6.生成哈希值

差異值哈希

1.圖片縮放為9*8大小

2.將圖片灰度化

3.差異值計(jì)算(每行相鄰像素的差值,這樣會生成8*8的差值,前一個像素大于后一個像素則為1,否則為0)

4.生成哈希值

計(jì)算距離

生成每一個圖片的哈希值后,需要計(jì)算哈希值的距離,來判斷兩張圖片的相似度。一般使用漢明距離,也就是逐位計(jì)算兩張圖片的哈希值是否相同。

實(shí)現(xiàn)

下面是用python實(shí)現(xiàn)的三種哈希:

  1. import cv2
  2. import numpy as np
  3. import time
  4. #均值哈希算法
  5. def aHash(img):
  6. #縮放為8*8
  7. img=cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC)
  8. #轉(zhuǎn)換為灰度圖
  9. gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  10. #s為像素和初值為0,hash_str為hash值初值為''
  11. s=0
  12. hash_str=''
  13. #遍歷累加求像素和
  14. for i in range(8):
  15. for j in range(8):
  16. s=s+gray[i,j]
  17. #求平均灰度
  18. avg=s/64
  19. #灰度大于平均值為1相反為0生成圖片的hash值
  20. for i in range(8):
  21. for j in range(8):
  22. if gray[i,j]>avg:
  23. hash_str=hash_str+'1'
  24. else:
  25. hash_str=hash_str+'0'
  26. return hash_str
  27. #差值感知算法
  28. def dHash(img):
  29. #縮放8*8
  30. img=cv2.resize(img,(9,8),interpolation=cv2.INTER_CUBIC)
  31. #轉(zhuǎn)換灰度圖
  32. gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  33. hash_str=''
  34. #每行前一個像素大于后一個像素為1,相反為0,生成哈希
  35. for i in range(8):
  36. for j in range(8):
  37. if gray[i,j]>gray[i,j+1]:
  38. hash_str=hash_str+'1'
  39. else:
  40. hash_str=hash_str+'0'
  41. return hash_str
  42. #Hash值對比
  43. def cmpHash(hash1,hash2):
  44. n=0
  45. #hash長度不同則返回-1代表傳參出錯
  46. if len(hash1)!=len(hash2):
  47. return -1
  48. #遍歷判斷
  49. for i in range(len(hash1)):
  50. #不相等則n計(jì)數(shù)+1,n最終為相似度
  51. if hash1[i]!=hash2[i]:
  52. n=n+1
  53. return 1 - n / 64
  54. def pHash(imgfile):
  55. img_list=[]
  56. #加載并調(diào)整圖片為32x32灰度圖片
  57. img=cv2.imread(imgfile, 0)
  58. img=cv2.resize(img,(64,64),interpolation=cv2.INTER_CUBIC)
  59. #創(chuàng)建二維列表
  60. h, w = img.shape[:2]
  61. vis0 = np.zeros((h,w), np.float32)
  62. vis0[:h,:w] = img #填充數(shù)據(jù)
  63. #二維Dct變換
  64. vis1 = cv2.dct(cv2.dct(vis0))
  65. #cv.SaveImage('a.jpg',cv.fromarray(vis0)) #保存圖片
  66. vis1.resize(32,32)
  67. #把二維list變成一維list
  68. img_list=vis1.flatten()
  69. #計(jì)算均值
  70. avg = sum(img_list)*1./len(img_list)
  71. avg_list = ['0' if i>avg else '1' for i in img_list]
  72. #得到哈希值
  73. return ''.join(['%x' % int(''.join(avg_list[x:x+4]),2) for x in range(0,32*32,4)])
  74. def hammingDist(s1, s2):
  75. #assert len(s1) == len(s2)
  76. return 1 - sum([ch1 != ch2 for ch1, ch2 in zip(s1, s2)])*1. / (32*32/4)
  77. if __name__ == '__main__':
  78. img1 = cv2.imread("F:\\Humpback Whale\\phash\\4.jpg")
  79. img2 = cv2.imread("F:\\Humpback Whale\\phash\\2d6610b9.jpg")
  80. time1 = time.time()
  81. hash1 = aHash(img1)
  82. hash2 = aHash(img2)
  83. n = cmpHash(hash1, hash2)
  84. print('均值哈希算法相似度:', n, "-----time=", (time.time() - time1))
  85. time1 = time.time()
  86. hash1 = dHash(img1)
  87. hash2 = dHash(img2)
  88. n = cmpHash(hash1, hash2)
  89. print('差值哈希算法相似度:', n, "-----time=", (time.time() - time1))
  90. time1 = time.time()
  91. HASH1=pHash("F:\\Humpback Whale\\phash\\4.jpg")
  92. HASH2=pHash("F:\\Humpback Whale\\phash\\2d6610b9.jpg")
  93. out_score = hammingDist(HASH1,HASH2)
  94. print('感知哈希算法相似度:', out_score, "-----time=", (time.time() - time1))

并做了一些實(shí)驗(yàn),來比較三種哈希的特點(diǎn):

1.同一張圖片

均值哈希算法相似度: 1.0 -----time= 0.0
差值哈希算法相似度: 1.0 -----time= 0.0
感知哈希算法相似度: 1.0 -----time= 0.031249523162841797

2.圖片resize成其他大小


均值哈希算法相似度: 0.890625 -----time= 0.0
差值哈希算法相似度: 0.859375 -----time= 0.0
感知哈希算法相似度: 0.921875 -----time= 0.03124713897705078

3.改變圖片亮度

均值哈希算法相似度: 0.984375 -----time= 0.0
差值哈希算法相似度: 0.9375 -----time= 0.0
感知哈希算法相似度: 0.95703125 -----time= 0.0312497615814209

4. 改變圖片對比度

均值哈希算法相似度: 1.0 -----time= 0.0
差值哈希算法相似度: 1.0 -----time= 0.0
感知哈希算法相似度: 0.8828125 -----time= 0.04687380790710449

5.改變圖片銳度

均值哈希算法相似度: 0.984375 -----time= 0.0
差值哈希算法相似度: 0.890625 -----time= 0.0
感知哈希算法相似度: 0.94921875 -----time= 0.031252145767211914

6.色度增強(qiáng)

均值哈希算法相似度: 1.0 -----time= 0.015625715255737305
差值哈希算法相似度: 0.984375 -----time= 0.0
感知哈希算法相似度: 0.99609375 -----time= 0.0312497615814209

7.圖片旋轉(zhuǎn)

均值哈希算法相似度: 0.484375 -----time= 0.0
差值哈希算法相似度: 0.46875 -----time= 0.0
感知哈希算法相似度: 0.4609375 -----time= 0.031249046325683594

均值哈希算法相似度: 0.375 -----time= 0.0
差值哈希算法相似度: 0.515625 -----time= 0.0
感知哈希算法相似度: 0.62890625 -----time= 0.03132271766662598

從上面的實(shí)驗(yàn)結(jié)果可以得出一下結(jié)論:

1.均值哈希和差值哈希算法的時間都比感知哈希少,因?yàn)楦兄esize為32*32,并且要進(jìn)行DCT離散余弦變換,這個計(jì)算比較耗時

2.改變圖片的亮度,色度,對比度,銳度,均值哈希的效果都是最好的,幾乎不受影響,其次是差值哈希,最差是感知哈希

3.但是感知哈希在圖片旋轉(zhuǎn)以及resize后,效果比前兩者要好

https://blog.csdn.net/qq_32799915/article/details/81000437

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ML之Hash_EditDistance:基于輸入圖片哈?;?均值哈希+差值哈希)即8*8個元素的單向vector利用編輯距離算法進(jìn)行判別
幾個比較著名的哈希算法
基于感知哈希算法的視覺目標(biāo)跟蹤
以圖搜圖 看起來像它—圖像搜索其實(shí)也不難
BloomFilter——大規(guī)模數(shù)據(jù)處理利器
哈希函數(shù)(哈希表)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服