相似图片搜索的三种算法
想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,这种搜索的核心算法有三种,都是利用信息指纹比较,这些算法都很易懂,下面分别介绍一下:
一、平均哈希算法(aHash)
此算法是基于比较灰度图每个像素与平均值来实现的。
步骤:
1.缩放图片:为了保留结构去掉细节,去除大小、横纵比的差异,把图片统一缩放到8*8,共64个像素的图片。
2.转化为灰度图:把缩放后的图片转化为256阶的灰度图。
附上灰度图相关算法(R = red, G = green, B = blue)
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
相关推荐
Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么? 计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常简单易懂。 我们可以用一个快速...
本文将深入探讨一个基于C++的项目——"PixSearch(相似图片搜索)",该项目利用三种哈希算法:均值哈希(aHash)、差异哈希(dHash)和感知哈希(pHash),并通过汉明距离计算来识别并搜索指定文件夹内的相似图片。...
虽然均值哈希更简单且更快速,但是在比较上更死板、僵硬。...一个更健壮的算法叫pHash,(我使用的是自己改进后的算法,但概念是一样的) pHash的做法是将均值的方法发挥到极致。使用离散余弦变换(DCT)降低频率。
Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,...
1. 图像特征提取:在搜索相似图片之前,我们需要从每张图片中提取出能够表征其内容的关键特征。常见的特征包括色彩直方图、边缘检测、纹理特征(如Gabor滤波器、LBP(Local Binary Pattern))、形状描述符(如SIFT...
相似图搜索是一种在大量图像库中寻找与目标图像相似图片的技术。在IT领域,这一技术有着广泛的应用,比如在社交媒体中查找重复或类似的内容,搜索引擎优化,以及版权保护等。其核心是通过哈希算法来创建图像的数字...
在C#编程中,查找图片中的相似图片是一项常见的任务,特别是在图像处理、计算机视觉和人工智能领域。本项目提供了一个经过测试的完整C#工程,能够帮助开发者实现这一功能。下面我们将详细探讨相关知识点。 1. 图像...
Java实现相似图片搜索原理 源码分享。 Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片。 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,原理非常...
pHash(Perceptual Hashing,感知哈希)是一种常见的算法,它能够将图像转化为一个紧凑的哈希值,用于比较两幅图像的相似度。本项目就是基于pHash算法来判断两张图片是否具有较高的相似度。 首先,我们需要理解...
在图像处理中,图片相似性查找是指通过算法比较两张图片的特征,找出它们之间的相似度。这在搜索引擎、内容推荐系统以及视觉检测等领域有着重要应用。 在Go语言中,实现图片相似性查找通常涉及以下几个步骤: 1. ...
讲述了相似图片搜索的几种方法,包括:基于文本的相似图片搜索和基于内容的图片搜索(浅层和深度学习方法),邮箱:fufaloveguomengkai@163.com
基于PCA算法的人脸识别的图片搜索引擎 基于PCA算法的人脸识别的图片搜索引擎是指通过使用PCA算法来实现人脸识别,并将其应用于图片搜索引擎中的技术。这种技术可以实现人脸图片的搜索和匹配功能,使得用户可以通过...
图像搜索用于对相似图片进行搜索的一种算法
在IT领域,"相似图片查找"是一个常见的任务,特别是在...综上所述,"相似图片查找"是一个涉及图片处理、特征提取、哈希算法和高效搜索策略的综合性问题。理解并掌握这些知识点,将有助于开发出高质量的图像分析系统。
本压缩包中的资源,"opencv-图片相似度对比代码-感知哈希算法",提供了一种基于感知哈希(Perceptual Hashing, PHash)的方法来实现这一功能,尤其适用于在大量图像中寻找重复或相似的图像。 感知哈希是一种将图像...
本文将详细介绍如何使用Lire库进行图片搜索,并通过提供的源码实例进行解析。 首先,我们需要了解Lire库的核心概念。Lire支持多种图像特征提取算法,例如JPEG-2000的Wavelet Transform Coefficients (WTC)、Local ...
5. **哈希算法**:如平均颜色哈希、差分颜色哈希、感知哈希等,可以将图片转换为短的哈希值,然后比较这些哈希值来快速判断图片是否相似。 6. **特征匹配**:例如SIFT(尺度不变特征变换)、SURF(加速稳健特征)或...
本文将深入探讨一个基于Java实现的、在淘宝中用于根据图片搜索图片的相似图像识别系统,该系统据称准确率高达95%。 首先,我们要了解这个系统的核心算法——直方图比较。直方图是描述图像色彩分布的一种统计方法,...
《基于特征点匹配的相似图片搜索技术详解》 在当今数字化时代,图像处理与计算机视觉技术日新月异,其中,基于特征点匹配的相似图片搜索技术是图像检索领域的重要一环。它允许用户通过一张参考图片快速找到与其内容...
总的来说,感知哈希算法是一种强大的工具,能够有效地在大量图像中寻找相似内容。它的应用不仅限于图片搜索,还可以扩展到视频分析、监控系统、内容过滤等多个领域。理解和掌握这一技术对于从事图像处理和数据分析的...