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

标签: 相似 图片搜索 哈希 | 发表时间:2013-03-01 04:32 | 作者:nash_
出处:http://blog.csdn.net

想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,达到图片比较目的且利用信息指纹比较有三种算法,这些算法都很易懂,下面分别介绍一下:


一、平均哈希算法(aHash)

此算法是基于比较灰度图每个像素与平均值来实现的,最适用于缩略图,放大图搜索。

步骤:

1.缩放图片:为了保留结构去掉细节,去除大小、横纵比的差异,把图片统一缩放到8*8,共64个像素的图片。

2.转化为灰度图:把缩放后的图片转化为256阶的灰度图。

附上灰度图相关算法(R = red, G = green, B = blue)

1.浮点算法:Gray=R*0.3+G*0.59+B*0.11
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*76+G*151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
3.计算平均值: 计算进行灰度处理后图片的所有像素点的平均值。

4.比较像素灰度值:遍历灰度图片每一个像素,如果大于平均值记录为1,否则为0.

5.得到信息指纹:组合64个bit位,顺序随意保持一致性即可。

6.对比指纹:计算两幅图片的指纹,计算汉明距离(从一个指纹到另一个指纹需要变几次),汉明距离越大则说明图片越不一致,反之,汉明距离越小则说明图片越相似,当距离为0时,说明完全相同。(通常认为距离>10 就是两张完全不同的图片)


下面是我用java写的此算法的程序,eclipse可直接运行。

下载地址: http://download.csdn.net/detail/nash_/5093143


待比较的原图:




图片库中的四张图:



输出结果:

similar_pic.jpg与原图很少相似
google.gif与原图完全不同
origin.jpg与原图是同一张图
ohter_word.jpg与原图极其相似


二、感知哈希算法(pHash)

平均哈希算法过于严格,不够精确,更适合搜索缩略图,为了获得更精确的结果可以选择感知哈希算法,它采用的是DCT(离散余弦变换)来降低频率的方法

步骤:

1.缩小图片:32 * 32是一个较好的大小,这样方便DCT计算

2.转化为灰度图:把缩放后的图片转化为256阶的灰度图。(具体算法见平均哈希算法步骤)

3.计算DCT:DCT把图片分离成分率的集合

4.缩小DCT:DCT是32*32,保留左上角的8*8,这些代表的图片的最低频率

5.计算平均值:计算缩小DCT后的所有像素点的平均值。

6.进一步减小DCT:大于平均值记录为1,反之记录为0.

7.得到信息指纹:组合64个信息位,顺序随意保持一致性即可。

8.对比指纹:计算两幅图片的指纹,计算汉明距离(从一个指纹到另一个指纹需要变几次),汉明距离越大则说明图片越不一致,反之,汉明距离越小则说明图片越相似,当距离为0时,说明完全相同。(通常认为距离>10 就是两张完全不同的图片)

此算法可参考开源项目pHash,下载地址: http://www.phash.org/download/


三、dHash

相比pHash,dHash的速度要快的多,相比aHash,dHash在效率几乎相同的情况下的效果要更好,它是基于渐变实现的。

步骤:

1.缩小图片:收缩到9*8的大小,一遍它有72的像素点

2.转化为灰度图:把缩放后的图片转化为256阶的灰度图。(具体算法见平均哈希算法步骤)

3.计算差异值:dHash算法工作在相邻像素之间,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值

4.获得指纹:如果左边的像素比右边的更亮,则记录为1,否则为0.


图片搜索特征提取方法有很多,很多算法还有许多可以改进的地方,比如对于人物可以先进行人脸识别,再在面部区域进行局部的哈希,或者背景是纯色的可以先过滤剪裁等等。



==================================================================================================

  作者:nash_  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址: http://blog.csdn.net/nash_/article/details/8618775

===================================================================================================

作者:nash_ 发表于2013-3-1 4:32:00 原文链接
阅读:37 评论:0 查看评论

相关 [相似 图片搜索 哈希] 推荐:

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

- - CSDN博客推荐文章
想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,达到图片比较目的且利用信息指纹比较有三种算法,这些算法都很易懂,下面分别介绍一下:. 一、平均哈希算法(aHash). 此算法是基于比较灰度图每个像素与平均值来实现的,最适用于缩略图,放大图搜索. 1.缩放图片:为了保留结构去掉细节,去除大小、横纵比的差异,把图片统一缩放到8*8,共64个像素的图片.

相似图片搜索的原理

- apuar - 阮一峰的网络日志
上个月,Google把"相似图片搜索"正式放上了首页. 你可以用一张图片,搜索互联网上所有与它相似的图片. 你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片. 下面这张图片是美国女演员Alyson Hannigan. 上传后,Google返回如下结果:. 类似的"相似图片搜索引擎"还有不少,TinEye甚至可以找出照片的拍摄背景.

相似图片搜索的原理(二)

- - 阮一峰的网络日志
二年前,我写了 《相似图片搜索的原理》,介绍了一种最简单的实现方法. 昨天,我在 isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记. 每张图片都可以生成 颜色分布的直方图(color histogram). 如果两张图片的直方图很接近,就可以认为它们很相似. 任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方图 + 最后合成的直方图).

以图搜图 – 3大相似图片搜索引擎

- 杨磊 - 帕兰映像
以图搜图,顾名思义就是上传一张图片,网站搜索并显示与之类似的图片. 看到一个可爱的卡通头像想搜出更多来. 看看是不是用旧图片制作的新新闻. 还有很多用法就看大家的想象力啦. 作者爱好搜集图片,最不能容忍的就是美图上面有水印,只要上传图片到以图搜图网站,轻轻一点便能搜出不带水印的图片. 这种去水印的方法是不是很给力,我的独创哦.

Chrome 相似图片搜索扩展 LeiTu Image Search

- zg - 谷奥——探寻谷歌的奥秘
感谢读者 sligtCats 的自爆. LeiTu Image Search这货是sligtCats昨天晚上制作的Chrome类似图片搜索扩展(简称类图搜索). 安装之后可以在图片上右键即开始搜索和它类似的图片. 内有TinEye、Google Search by image和百度识图三个功能,可以按需使用.

网站推荐:11个相似图片搜索网站(以图找图)

- slackware - FeedzShare
来自: 有意思吧 - FeedzShare  . 发布时间:2011年03月06日,  已有 6 人推荐. 你想凭着一张现有图片找出它的原始图片,或者是凭着一张小的缩略图找出原始大图吗. 下面的十款搜索引擎可以帮你实现,以图找图,以图搜图,以图片搜索相似的图片. 一:http://tineye.com/.

Google支持HTTPS图片搜索

- marmot694745 - 月光博客
  Google的HTTPS搜索终于支持图片了,至此Google的大部分搜索功能都已经支持HTTPS加密方式的搜索,从而解决了在加密环境下进行Google搜索的问题.   对于中国用户来说,目前使用HTTPS的Google搜索还需要使用Hosts文件,经过我的测试,HTTPS的图片搜索有时候会出现被干扰的现象,导致图片无法显示,如果未来预览图片无法访问的话,可以通过修改Hosts的方式继续访问加密方式的图片搜索,来查看搜索的预览图片.

【9to5 Google】Google利用“知识图谱”优化图片搜索结果

- - 译言-电脑/网络/数码科技
自去年发布“图片搜索”功能以来,Google几乎每周都会更新算法. 如今,Google计划利用“知识图谱(Knowledge Graph)”继续优化这个大受欢迎的功能. 借助“图片搜索”功能,用户导入一张图片,Google即可反馈与此图相关的其他图片和搜索结果. 用户可以拖曳上传图片,或者输入图片网址.

Google即时页面、桌面语音搜索和上传图片搜索让搜索更快速

- Brant - 36氪
在今天的「Inside Search」大会上,Google发布了一些新功能,包括对桌面语音搜索的支持,新的手机版界面,通过图片来搜索,以及即时页面(Instant Pages)等. 从桌面拖一张图片到搜索框,Google会试图验证并返回相关的结果,Google说这个技术很像手机上的Google Goggles,但是为桌面体验重新设计了.