图像处理——相似图像检索

转载 2015年11月18日 11:04:41

作者:阮一峰

转自:http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html

上个月,Google把"相似图片搜索"正式放上了首页。

你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。

一个对话框会出现。

你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。

上传后,Google返回如下结果:

类似的"相似图片搜索引擎"还有不少,TinEye甚至可以找出照片的拍摄背景。

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

这种技术的原理是什么?计算机怎么知道两张图片相似呢?

根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。

这里的关键技术叫做"感知哈希算法"(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。

下面是一个最简单的实现:

第一步,缩小尺寸。

将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

 

第二步,简化色彩。

将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

第三步,计算平均值。

计算所有64个像素的灰度平均值。

第四步,比较像素的灰度。

将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

第五步,计算哈希值。

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

 =  = 8f373714acfcf4d0

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算"汉明距离"(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

具体的代码实现,可以参见Wote用python语言写的imgHash.py。代码很短,只有53行。使用的时候,第一个参数是基准图片,第二个参数是用来比较的其他图片所在的目录,返回结果是两张图片之间不相同的数据位数量(汉明距离)。

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。

实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

相关文章推荐

BoW图像检索Python实战

前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Python搞BoW词袋模型,一方面主要是练练Python,另一方面也是为了CBIR群开讲的关于图像检索群活动第二期而准备的...

Python机器学习实践例子——Titanic乘客生存预测模型分析

最近学习机器学习,发现网上各种理论讲的不少,但是对于实践涉及很有不足。因为将自己的实践记录整理于此,希望对大家有所帮助。 Titanic乘客生存预测模型 样例说明:题目来自于知名机器学习竞赛网站ka...
  • zcs99
  • zcs99
  • 2017年04月03日 10:03
  • 1195

数字图像处理:第二十三章 基于内容的图象与视频检索

第二十三章基于内容的图象与视频检索 目录 1.    引言 2.    基于内容检索的图象特征 3.    基于内容的视频标注与检索 作业 1. 引言 随着社会的信息化发展日益深入,互连网...

互联网相似图像识别检索引擎 —— 基于图像签名的方式

一、引言  多媒体识别是信息检索中难度较高且需求日益旺盛的一个问题。以图像为例,按照图像检索中使用的信息区分,图像可以分为两类:基于文本的图像检索和基于内容识别的图像检索(CBIR:Conten...

使用直方图比较检索相似图像

  • 2013年09月22日 19:25
  • 3KB
  • 下载

三种基于感知哈希算法的相似图像检索技术

三种基于感知哈希算法的相似图像检索技术 时间 2014-09-26 11:32:46  CSDN博客 原文  http://blog.csdn.net/xaut_zjb/article/det...

图像检索中相似度度量公式:各种距离

基于内容的图像检索(Content-Based Image Retrieval)是指通过对图像视觉特征和上下文联系的分析,提取出图像的内容特征作为图像索引来得到所需的图像。 相似度度量方法 在基于...

相似图像检索汇总

下面的十款搜索引擎可以帮你实现,以图找图,以图搜图,以图片搜索相似的图片。   一:http://tineye.com/ Tineye是典型的以图找图搜索引擎,输入本地硬盘上的图片或者输入图...

OpenCV 2 学习笔记(21): 使用直方图比较检索相似图像

基于内容的图像检索在计算机视觉中是一个重要的方法。它从一组图片中找出一个和给定图片内容相似的图片。在前面我们已经学习过灰度直方图的相关知识,它包含了图像内容的许多信息。言下之意就是直方图可以被用来进行...

基于Gist特征的相似图像检索

利用上一篇文章中提到的Gist特征,用shou't
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图像处理——相似图像检索
举报原因:
原因补充:

(最多只允许输入30个字)