Hash Method

Hash Method

HASH_METHOD = {

‘phash’: PHash,

‘dhash’: DHash,

‘whash’: WHash,

‘ahash’: AHash

}

Phash

pHash(Perceptual Hash)是一种感知哈希算法,用于通过分析图像的内容生成一个指纹(哈希值),这个指纹可以用来比较图像之间的相似性。不同于传统的加密哈希算法(如MD5或SHA),感知哈希关注的是内容的相似性,而不是内容的精确匹配。因此,即使图像经过了一些轻微的修改,如缩放、旋转或亮度调整,它们的pHash值仍然会非常接近。

pHash的计算过程主要包括以下几个步骤:

  1. 缩小图像尺寸:将图像缩小到一个标准大小(通常为32x32像素)。这一步骤有助于减少计算量,并保留图像的主要特征。

  2. 灰度化处理:将图像转换为灰度图像,以消除颜色信息的干扰,专注于图像的亮度模式。

  3. 离散余弦变换(DCT):应用DCT,将图像从空间域转换到频率域。在频率域中,图像的信息被表示为一系列频率系数,其中低频部分包含了图像的主要视觉信息。pHash算法通常只保留左上角的8x8矩阵,这部分矩阵主要包含图像的低频信息。

  4. 计算哈希值:通过与DCT系数的中值比较,将低频矩阵中的每个值二值化(大于中值的设为1,小于中值的设为0),生成一个64位的二进制字符串,这就是图像的pHash值。

  5. 比较哈希值:通过计算两个pHash值的汉明距离(即两个二进制字符串中不同位的数量),可以评估两幅图像的相似性。汉明距离越小,图像越相似。

  • 参考

    • pHash在处理图像相似性检测、重复图像查找等方面非常有效,尤其适用于需要容忍轻微图像变化的场景

    • https://mlampros.github.io/OpenImageR/reference/dhash.html

    • https://cloudinary.com/blog/how_to_automatically_identify_similar_images_using_phash

    • Phash

Dhash

dHash(Difference Hash)是一种用于图像相似性检测的感知哈希算法。它通过比较图像中相邻像素的亮度差异来生成一个独特的指纹,适合快速检测图像的近似重复。

dHash的计算过程包括以下步骤:

  1. 图像缩小:将图像缩小到一个固定尺寸,通常是9x8像素。这样可以保留图像的基本结构,并去除高频噪声。

  2. 灰度化处理:将图像转换为灰度图像,消除颜色对亮度的影响,使算法专注于图像的结构信息。

  3. 计算差异:对于每一行的像素,计算相邻像素之间的亮度差异。如果左边的像素亮度大于右边的像素,则记录为1,否则记录为0。通过这种方式生成64位的二进制字符串。

  4. 生成哈希值:将上述64位二进制字符串组合成图像的dHash值。

  5. 相似性比较:通过计算两个图像的dHash值之间的汉明距离(即两个哈希值中不同位的数量),可以判断它们的相似程度。距离越小,图像越相似。

  • 参考

    • dHash算法因其速度快且实现简单,常用于检测近似重复的图像,例如检测同一图像的稍微裁剪或光照变化版本

    • https://github.com/benhoyt/dhash

    • https://github.com/Rayraegah/dhash

    • https://mlampros.github.io/OpenImageR/reference/dhash.html

Whash

WHash(Wavelet Hash)是一种利用小波变换进行图像哈希的算法,旨在通过提取图像的空间信息和低频信息来生成图像的唯一指纹。这种算法比其他感知哈希算法(如pHash)更鲁棒,特别是在图像存在空间信息变化时。

WHash的计算过程包括以下几个步骤:

  1. 图像预处理:首先,将图像缩放到一个固定的尺寸,并转换为灰度图像。这样可以减少计算复杂度并消除颜色信息对结果的影响。

  2. 小波变换:对灰度图像应用小波变换(通常使用Haar小波),将图像分解为不同的频带。小波变换将图像分解为低频信息(表示大致的形状)和高频信息(表示边缘和细节)。

  3. 选择低频信息:从小波变换结果中提取低频信息,这部分信息保留了图像的整体结构。

  4. 二值化处理:将提取的低频信息进行二值化处理。具体来说,通过计算低频信息的中值,然后将图像中每个像素的值与中值进行比较,生成一个二进制的哈希值。

  • 参考

    • WHash通过这种方法生成的哈希值可以用于图像的相似性检测,尤其在需要考虑图像的空间变化时,WHash表现得更加鲁棒

    • https://www.cnblogs.com/ERKE/p/14124309.html

    • https://www.lmlphp.com/user/16511/article/item/460190/

    • https://blog.csdn.net/ERKELIU/article/details/111056167

Ahash

aHash,或称为平均哈希(Average Hash),是一种简单但有效的图像感知哈希算法,主要用于检测图像的相似性。与其他感知哈希算法相比,aHash通过比较图像的平均亮度生成一个二进制哈希值,是判断两幅图像是否相似的基础方法之一。

aHash的计算过程如下:

  1. 缩小图像尺寸:首先将图像缩小到一个固定的小尺寸,通常是8x8像素。这一步骤的目的是去除图像的细节,仅保留其整体结构和亮度信息。

  2. 灰度化处理:将缩小后的图像转换为灰度图像,消除颜色信息的影响,只关注图像的亮度。

  3. 计算平均值:计算灰度图像中所有像素的平均亮度值。

  4. 生成哈希值:通过将每个像素的亮度与平均值进行比较,大于或等于平均值的像素被标记为1,小于平均值的标记为0。这样生成一个64位的二进制哈希值。

  5. 比较哈希值:通过计算两个图像的哈希值之间的汉明距离,可以判断它们的相似性。汉明距离越小,表示图像越相似。

  • 参考

    • 这种算法非常适合快速检测图像是否相似,特别是在处理缩略图或在计算资源有限的情况下

    • https://amethyst.github.io/specs/docs/api/ahash/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值