相似图片搜索的三种哈希算法

必看!值得一看的是这个方法吗?该方法非常有效。
一、平均哈希算法(aHash)
此算法通过在灰度图中比较每个像素与平均值来实现特定功能;特别适合于缩略图及放大图搜索任务。
步骤:
图像缩放 : 以保持结构完整性并去除细节 , 消除尺寸 、 比例上的差异 , 将所有图片统一调整至8x8像素尺寸 , 共计64个像素点 。
2.转化为灰度图: 把缩放后的图片转化为256阶的灰度图。
附上灰度图相关算法(R = red, G = green, B = blue)
1.浮点算法:Gray=R0.3+G0.59+B*0.11
2.整数方法:Gray=(R30+G59+B*11)/100
3.移位方法:Gray =(R76+G151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
3.计算平均值 : 计算进行灰度处理后图片的所有像素点的平均值。
该步骤用于分析灰度图像中每个像素的亮度值,并根据其与平均亮度的对比进行分类
5.得到信息指纹: 组合64个bit位,顺序随意保持一致性即可。
6. 比对指纹: 比对两幅图片的指纹后测定其间的汉明差异度(即从一一幅指纹转换至另一幅所需更改的位元数)。其值越大,则意味着两者差异越大;反之,则两者越接近。当汉明差异度为零时,则判定为同一张图像;一般认为当该数值超过10时,则判定为两张不同的图像。
下面是我用java写的此算法的程序,eclipse可直接运行。
下载地址:<>
待比较的原图:

图片库中的四张图:

输出结果:
在比较中发现similar_pic.jpg与原图之间的差异较大
二、感知哈希算法(pHash)
平均哈希算法显得过于僵硬且不够精准,在搜索缩略图方面表现得更为合适。若要追求更为精确的结果,则应选择感知哈希算法这一方法。该技术主要通过DCT(离散余弦变换)途径来降低图像的高频成分。
步骤:
1.缩小图片: 32 * 32是一个较好的大小,这样方便DCT计算
2. 转化为灰度图: 将经过缩放处理后的图像数据转换为基于256个灰度层次的图像矩阵。(具体编码实现可参考平均哈希算法的具体步骤)
3.计算DCT: DCT把图片分离成分率的集合
4.缩小DCT: DCT是3232,保留左上角的88,这些代表的图片的最低频率
5.计算平均值: 计算缩小DCT后的所有像素点的平均值。
6.进一步减小DCT :大于平均值记录为1,反之记录为0.
7.得到信息指纹: 组合64个信息位,顺序随意保持一致性即可。
**8. 对比指纹:**提取两幅图像各自的指纹特征,并计算两者之间的汉明距离(即两个指纹之间的差异次数)。具体而言,在将一个指纹转换至另一个指纹的过程中所需的变化次数即为其汉明距离值。一般来说, 汉明距离超过10时,则认为两张图片完全不同;反之, 当汉明距离值较小时, 则表示对应的两张图片之间具有较高的相似度;当 Hanmming 距离为零时, 表示所比较的两个图像完全一致
此算法可参考开源项目pHash,下载地址:http://www.phash.org/download/
三、差异哈希算法(dHash)
相较于pHash,在图像处理领域中dHash的运行速度显著优于其他算法。与aHash相比,在效率几乎相同的情况下表现更为出色。该算法通过渐变的方法实现了高效处理。
步骤:
1.缩小图片: 收缩到9*8的大小,一遍它有72的像素点
2. 转化为灰度图: 将缩放后的图像转换为8位灰度图像(可参考平均哈希算法的具体步骤)。
3. 计算差异值: dHash算法基于相邻像素之间的比较,在每一行有9个像素点的情况下形成了8对不同的对比区域。经过这样的计算步骤后,在整个图像中总共获得了64个dHash特征码。
4.获得指纹: 如果左边的像素比右边的更亮,则记录为1,否则为0.
需要说明的是这种指纹算法不仅适用于图片搜索而且也可以用于其他多媒体形式此外图片搜索中的特征提取方法有很多种这些算法还存在许多可以改进的地方例如在处理人物时可以通过先进行人脸识别然后再在面部区域执行局部哈希运算或者当背景为纯色时可以在处理前对图像进行剪裁优化最后在搜索结果中还可以依据颜色风景特征以及产品类别等因素进一步筛选和优化结果
==================================================================================================
作者:nash_ 欢迎转载,与人分享是进步的源泉!
请广大用户在访问本文时,请确保遵守相关规定并尊重版权保护原则;如需进一步了解相关内容,请访问以下链接获取详细信息:()、()、**()**以及<>等官方发布渠道
===================================================================================================
