`
wbj0110
  • 浏览: 1610161 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多

相似图片搜索的三种算法

图片

想必大家都用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可直接运行。

下载地址:見附件

 

待比较的原图:

三种

 

 

图片库中的四张图:

搜索

 

输出结果:

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.

 

这几种算法只是图片相似计算的核心,还有许多可以改进的地方,比如对于人物可以先进行人脸识别,再在面部区域进行局部的哈希,或者背景是纯色的可以先过滤剪裁等等。

 

come from internet

分享到:
评论

相关推荐

    相似图片搜索原理源码-Java实现

    Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么? 计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常简单易懂。 我们可以用一个快速...

    基于C++通过三种哈希算法,透过汉明距离的比较,搜索指定文件夹内相似图片

    本文将深入探讨一个基于C++的项目——"PixSearch(相似图片搜索)",该项目利用三种哈希算法:均值哈希(aHash)、差异哈希(dHash)和感知哈希(pHash),并通过汉明距离计算来识别并搜索指定文件夹内的相似图片。...

    图片搜索图片,基于php实现的图片相似搜索类,优化了感知算法(hash)不准确的问题

    虽然均值哈希更简单且更快速,但是在比较上更死板、僵硬。...一个更健壮的算法叫pHash,(我使用的是自己改进后的算法,但概念是一样的) pHash的做法是将均值的方法发挥到极致。使用离散余弦变换(DCT)降低频率。

    相似图片搜索原理 Java实现源码

    Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,...

    bmp图片相似性搜索

    1. 图像特征提取:在搜索相似图片之前,我们需要从每张图片中提取出能够表征其内容的关键特征。常见的特征包括色彩直方图、边缘检测、纹理特征(如Gabor滤波器、LBP(Local Binary Pattern))、形状描述符(如SIFT...

    相似图搜索原理-感知哈希算法

    相似图搜索是一种在大量图像库中寻找与目标图像相似图片的技术。在IT领域,这一技术有着广泛的应用,比如在社交媒体中查找重复或类似的内容,搜索引擎优化,以及版权保护等。其核心是通过哈希算法来创建图像的数字...

    c#查找图片中相似图片代码

    在C#编程中,查找图片中的相似图片是一项常见的任务,特别是在图像处理、计算机视觉和人工智能领域。本项目提供了一个经过测试的完整C#工程,能够帮助开发者实现这一功能。下面我们将详细探讨相关知识点。 1. 图像...

    Java实现相似图片搜索原理 源码分享

    Java实现相似图片搜索原理 源码分享。 Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常...

    Unity C#使用pHash算法实现图片相似度计算,判断俩张图片是否相似PicSimilar.zip

    pHash(Perceptual Hashing,感知哈希)是一种常见的算法,它能够将图像转化为一个紧凑的哈希值,用于比较两幅图像的相似度。本项目就是基于pHash算法来判断两张图片是否具有较高的相似度。 首先,我们需要理解...

    最好用的Go图片相似查找,Golang语言

    在图像处理中,图片相似性查找是指通过算法比较两张图片的特征,找出它们之间的相似度。这在搜索引擎、内容推荐系统以及视觉检测等领域有着重要应用。 在Go语言中,实现图片相似性查找通常涉及以下几个步骤: 1. ...

    相似图片搜索

    讲述了相似图片搜索的几种方法,包括:基于文本的相似图片搜索和基于内容的图片搜索(浅层和深度学习方法),邮箱:fufaloveguomengkai@163.com

    基于PCA算法的人脸识别的图片搜索引擎.pdf

    基于PCA算法的人脸识别的图片搜索引擎 基于PCA算法的人脸识别的图片搜索引擎是指通过使用PCA算法来实现人脸识别,并将其应用于图片搜索引擎中的技术。这种技术可以实现人脸图片的搜索和匹配功能,使得用户可以通过...

    caseopen.rar_C#图片相似_visual c_图像搜索_图片搜索_图片相似

    图像搜索用于对相似图片进行搜索的一种算法

    相似图片查找

    在IT领域,"相似图片查找"是一个常见的任务,特别是在...综上所述,"相似图片查找"是一个涉及图片处理、特征提取、哈希算法和高效搜索策略的综合性问题。理解并掌握这些知识点,将有助于开发出高质量的图像分析系统。

    opencv-图片相似度对比代码-感知哈希算法

    本压缩包中的资源,"opencv-图片相似度对比代码-感知哈希算法",提供了一种基于感知哈希(Perceptual Hashing, PHash)的方法来实现这一功能,尤其适用于在大量图像中寻找重复或相似的图像。 感知哈希是一种将图像...

    基于Lire库搜索相似图片源码

    本文将详细介绍如何使用Lire库进行图片搜索,并通过提供的源码实例进行解析。 首先,我们需要了解Lire库的核心概念。Lire支持多种图像特征提取算法,例如JPEG-2000的Wavelet Transform Coefficients (WTC)、Local ...

    C#比较图片相似度,两张图片有多少相似

    5. **哈希算法**:如平均颜色哈希、差分颜色哈希、感知哈希等,可以将图片转换为短的哈希值,然后比较这些哈希值来快速判断图片是否相似。 6. **特征匹配**:例如SIFT(尺度不变特征变换)、SURF(加速稳健特征)或...

    淘宝中根据图片搜图片,基于Java语言实现的,相似图像识别准确率达95%

    本文将深入探讨一个基于Java实现的、在淘宝中用于根据图片搜索图片的相似图像识别系统,该系统据称准确率高达95%。 首先,我们要了解这个系统的核心算法——直方图比较。直方图是描述图像色彩分布的一种统计方法,...

    基于特征点匹配的相似图片搜索.zip

    《基于特征点匹配的相似图片搜索技术详解》 在当今数字化时代,图像处理与计算机视觉技术日新月异,其中,基于特征点匹配的相似图片搜索技术是图像检索领域的重要一环。它允许用户通过一张参考图片快速找到与其内容...

    图片识别-感知哈希算法

    总的来说,感知哈希算法是一种强大的工具,能够有效地在大量图像中寻找相似内容。它的应用不仅限于图片搜索,还可以扩展到视频分析、监控系统、内容过滤等多个领域。理解和掌握这一技术对于从事图像处理和数据分析的...

Global site tag (gtag.js) - Google Analytics