Python imagehash中的均值哈希、感知哈希、梯度哈希、小波哈希对比图片相似度

本文介绍了Python库imagehash中的四种哈希算法:pHash、wHash、aHash和dHash,用于比较图片相似度。通过测试代码和示例,展示了它们对分辨率和内容敏感性的差异,尤其在图像内容变化时的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《OpenCV系列教程》
《深度学习-如何提高数据集质量》

源码下载WaveletImageHash.py

imagehash

imagehash是使用Python语言编写的hash计算库,包括如下集中计算方式:

名称简称简介
average hashing (均值散列)aHash对图片的每个像素值进行比较,如果大于等于均值则输出1否则输出0.
perception hashing (感知散列)pHash它和均值散列有些相似,但它通过频域(frequency domain)做了一个离散余弦变换(Discrete Cosine Transformation).
gradient hash (梯度散列)dHash计算每个像素的差异,并将差异与平均差异进行比较。
wavelet hashing (小波散列)wHash它的工作原理使用频域(frequency domain)类似于pHash,并使用DWT替换了DCT.

测试图片

使用最为流行的图片

lenna400x400.jpglenna512x512.pnglenna317x360_add_text.jpg
在这里插入图片描述在这里插入图片描述在这里插入图片描述

pHash测试效果:

结果是对分辨率不敏感,但是对图像的内容很敏感。

phash leanna400  :  99c6562d7533a296
phash leanna512  :  99c6562d7533a296
phash leannatext :  98d4946d6e2a72b6
phash leanna400 compare leanna512  :  0.0
phash leanna400 compare leannatext :  0.28125
phash leanna512 compare leannatext :  0.28125

wHash测试效果:

对分辨率不是很敏感,对显示内容更敏感。

whash leanna400  :  b698bd8d0b0b8f8c
whash leanna512  :  be98bd890b0b8f8c
whash leannatext :  3e7e4d19190b0f1d
whash leanna400 compare leanna512  :  0.03125
whash leanna400 compare leannatext :  0.3125
whash leanna512 compare leannatext :  0.28125

aHash测试效果:

对分辨率不是很敏感,对显示内容更敏感。

average_hash leanna400  :  b69cbd890b0b8f8c
average_hash leanna512  :  b69c3d890b0b8f8c
average_hash leannatext :  3a7e4c09190b0f1f
average_hash leanna400 compare leanna512  :  0.015625
average_hash leanna400 compare leannatext :  0.3125
average_hash leanna512 compare leannatext :  0.296875

dHash测试效果:

对分辨率不是很敏感,对显示内容更敏感。

dhash leanna400  :  7670795b33131a38
dhash leanna512  :  7670795b33135a38
dhash leannatext :  f2f099b93393d9fd
dhash leanna400 compare leanna512  :  0.015625
dhash leanna400 compare leannatext :  0.296875
dhash leanna512 compare leannatext :  0.28125

测试代码:

由于效果不算好,我就不继续测试了。

import PIL
from PIL import Image
import imagehash

lenna400 = PIL.Image.open('./res/lenna400x400.jpg')
lenna512 = PIL.Image.open('./res/lenna512x512.png')
lennaText = PIL.Image.open('./res/lenna317x360_add_text.jpg')

p = imagehash.phash(lenna400)
p1 = imagehash.phash(lenna512)
p2 = imagehash.phash(lennaText)
print('phash leanna400  : ', p)
print('phash leanna512  : ', p1)
print('phash leannatext : ', p2)
print('phash leanna400 compare leanna512  : ', (p - p1) / len(p.hash) ** 2)
print('phash leanna400 compare leannatext : ', (p - p2) / len(p.hash) ** 2)
print('phash leanna512 compare leannatext : ', (p1 - p2) / len(p1.hash) ** 2, end='\n\n')

w = imagehash.whash(lenna400)
w1 = imagehash.whash(lenna512)
w2 = imagehash.whash(lennaText)
print('whash leanna400  : ', w)
print('whash leanna512  : ', w1)
print('whash leannatext : ', w2)
print('whash leanna400 compare leanna512  : ', (w - w1)/len(w.hash)**2)
print('whash leanna400 compare leannatext : ', (w - w2)/len(w.hash)**2)
print('whash leanna512 compare leannatext : ', (w1 - w2)/len(w1.hash)**2, end='\n\n')

a = imagehash.average_hash(lenna400)
a1 = imagehash.average_hash(lenna512)
a2 = imagehash.average_hash(lennaText)
print('average_hash leanna400  : ', a)
print('average_hash leanna512  : ', a1)
print('average_hash leannatext : ', a2)
print('average_hash leanna400 compare leanna512  : ', (a - a1)/len(a.hash)**2)
print('average_hash leanna400 compare leannatext : ', (a - a2)/len(a.hash)**2)
print('average_hash leanna512 compare leannatext : ', (a1 - a2)/len(a1.hash)**2, end='\n\n')

d = imagehash.dhash(lenna400)
d1 = imagehash.dhash(lenna512)
d2 = imagehash.dhash(lennaText)
print('dhash leanna400  : ', d)
print('dhash leanna512  : ', d1)
print('dhash leannatext : ', d2)
print('dhash leanna400 compare leanna512  : ', (d - d1) / len(d.hash) ** 2)
print('dhash leanna400 compare leannatext : ', (d - d2) / len(d.hash) ** 2)
print('dhash leanna512 compare leannatext : ', (d1 - d2) / len(d1.hash) ** 2)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值