各种 hash
aHash|pHash|dHash|wHash
实现了以上几种不同类型的 hash,hash通常是用于将一个 data 转化为一个固定长度的字符串,在图像 hash 中则通常用于快速的找到相同或者相似的图像。
参考,以下几种 hash 都是把图像降采样到一定的分辨率通常8 * 8 到 64 * 64之间,然后进行处理计算 hash。
- aHash (average hash)
resize 到 8 * 8或者 16 * 16,转灰度,计算像素均值,每个像素与之比较,小于取0否则取1,done. - pHash (perceptual hash)
感知 hash,resize 之后先做两次 dct(离散余弦变换) 变换,后面的跟上面的 ahash 一样。
原理: 两次 DCT 把图像能量按照频度大致分开,能量高的低频信息聚集于左上角,取左上角做均值哈希
- dhash (different hash)
原理: resize 为 (N, N + 1) 的尺寸然后对每行做差异值运算,合并起来作为哈希。本质上是基于图像渐变
差异值哈希,挨行进行对比,每一行跟上一行比较,依次比较每个元素,上一行大于下一行取1否则0。