上一篇讲了 DHash 的详细步骤,这篇详细讨论下 AHash:

  1. 缩小尺寸,建议 8*8
  2. 灰度化
  3. 计算平均值
  4. 比较像素的灰度
  5. 计算哈希值

有了上一篇 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 位的二进制值,即图片指纹。

代码如下:
均值哈希(AHash)

计算哈希值

参考 差值哈希(DHash)

本文原创发布于公众号 习习立 ,关注公众号回复 hash 获取源码。

相关文章: