传统的方法有
- ncc
- sift + HOG
基于深度学习的
各种图像分类网络 VGG/Inception V1~4/mobileNet/SqueezeNet
直方图距离
没有关注内容的位置信息,如:上白下黑和下白上黑的两张图相似度是 100%
平均哈希算法
算法步骤
- 读取图片
- 将图片转化成灰度图
- 将灰度图压缩成 8×8 大小的图片(生成 64 位的哈希)
- 计算图像所有灰度值的平均值
- 将 8×8 的像素从左到右依次与平均值作比较,如果灰度值大于平均值,则将 1 添加到哈希中,否则将添加 0。
- 得到一个哈希数,与系统中的其他哈希数比较
哈希数:0000000000010000000000000010000001000010100001101111111111111110
感知哈希算法
算法步骤
- 读取图片
- 转化成灰度图片
- 将灰度图片压缩成 9×8 大小
- 从每行开始,从左到右依次检查前 8 个像素,并将其与右边的相邻像素进行比较,类似于平均哈希算法,生成 64 位哈希数
哈希数:1111000000110000101110001100111010000110010011001000111010001110
差异哈希算法
算法步骤
- 读取图片
- 转化成灰度图
- 压缩成 8×4×8×4(32×32)其中 4 为系数因子
- 对图像进行离散余弦变换(discrete cosine transform,DTC),先行后列
32×32 灰度图 对行进行离散余弦变换
对列进行离散余弦变换
哈希数:1010010010101101100110011011001101100010100100000111011010101110
- https://content-blockchain.org/research/testing-different-image-hash-functions/
- Python 库:https://pypi.org/project/ImageHash/
- average hashing (aHash):http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
- perception hashing (pHash):http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
- difference hashing (dHash):http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html
- wavelet hashing (wHash):https://fullstackml.com/2016/07/02/wavelet-image-hash-in-python/