上一篇讲了 DHash 的详细步骤,这篇详细讨论下 AHash:
- 缩小尺寸,建议 8*8
- 灰度化
- 计算平均值
- 比较像素的灰度
- 计算哈希值
有了上一篇 DHash 的基础,AHash 就简单多了,步骤 2、5 是一样的,不同的地方就在 1、3、4 两步。
下面我们只讨论下 1、3、4 三个步骤。
缩小尺寸
与 DHash 不同,这里只需要缩小到 8 * 8,是因为实际操作只需要 64 个像素,DHash 取 9 * 8 是因为后一个像素要与前一个像素做差,最后得到的也是 64 个像素。
均值哈希不需要依赖其他像素,所以只需要缩小到 8*8 即可。
缩小尺寸的方法这里就不再赘述了,可以参考 差值哈希(DHash) 一文。
灰度化
参考 差值哈希(DHash)
计算平均值 & 比较像素的灰度
这两步是均值哈希的核心步骤。
所谓均值哈希,就是以所有像素点的平均值作为基准点(这里就是 64 个像素的平均值),然后依次用每个像素的值和均值做对比,大于或等于均值则记为 1,小于则记为 0,从而得到 64 位的二进制值,即图片指纹。
代码如下:
计算哈希值
参考 差值哈希(DHash)
本文原创发布于公众号 习习立 ,关注公众号回复 hash 获取源码。