Image Retrieval Q&A

1、常用的图像匹配算法及优缺点有哪些?

基于灰度相关,基于特征,基于关系三个层次,基于灰度相关的图像匹配较常用,基于特征匹配效果最好,但是算法复杂,耗时长,难以实现实时性,基于关系的匹配算法建立语义的网络,是人工智能技术在图像处理中的应用,目前为止无突破性的进展。

2、早期的CBIR中都是使用全局特征,因为全局特征不能很好的表达图像语义,后来又出现了基于区域的图像检索(RBIR),那现在RBIR的研究现状怎么样?和那些基于sift特征点的方法相比,使用分割进行图像检索是否可行?

第一个问题,RBIR这个提法不太多,因为CBIR本身包含RBIR。现在在学术上,主流的检索模型都是基于bag-of-visual-words模型进行的相关扩展。这种模型可在一些通用的图库上进行检索,并且效果不错。
第二个问题,将图像进行分割,然后再进行检索当然也是可行的。sift是先侦测特征点,然后使用周围的16x16的像素块的一些信息来描述这个点。进行图像检索,你可以分割图像,也可以不分割图像,这和是否使用sift不冲突。sift只是提取低级特征,分割在图像检索里面是一个更上层的操作。如果你使用图像分割的话,应该是利用图像分割的结果来描述图像的语义。

3、Google 图片搜索的原理是什么?

对于这种图像搜索的算法,一般是三个步骤:
1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。
2. 将图像特征信息进行编码,并将海量图像编码做查找表。对于目标图像,可以对分辨率较大的图像进行降采样,减少运算量后在进行图像特征提取和编码处理。
3. 相似度匹配运算:利用目标图像的编码值,在图像搜索引擎中的图像数据库进行全局或是局部的相似度计算;根据所需要的鲁棒性,设定阈值,然后将相似度高的图片预保留下来;最后应该还有一步筛选最佳匹配图片,这个应该还是用到特征检测算法。
其中每个步骤都有很多算法研究,围绕数学,统计学,图像编码,信号处理等理论进行研究。
=======================================================================
下面是阮一峰的一个最简单的实现:
原文链接http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html

这种技术的原理是什么?计算机怎么知道两张图片相似呢?
根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。
这里的关键技术叫做"感知哈希算法"(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。
下面是一个最简单的实现:
第一步,缩小尺寸。
将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

第二步,简化色彩。
将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
第三步,计算平均值。
计算所有64个像素的灰度平均值。
第四步,比较像素的灰度。
将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
第五步,计算哈希值。
将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算"汉明距离"(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。
具体的代码实现,可以参见Wote用python语言写的imgHash.py。代码很短,只有53行。使用的时候,第一个参数是基准图片,第二个参数是用来比较的其他图片所在的目录,返回结果是两张图片之间不相同的数据位数量(汉明距离)。
这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。
实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

                                          (待更新)

时间: 2024-10-13 05:28:33

Image Retrieval Q&A的相关文章

【Q&A】12C OCP 1z0-060 QUESTION 1: About Managing Temporary Tablespaces in a CDB

QUESTION 1 Your multitenant container (CDB) contains two pluggable databases (PDB), HR_PDB and ACCOUNTS_PDB, both of which use the CDB tablespace. The temp file is called temp01.tmp. A user issues a query on a table on one of the PDBs and receives th

$q服务的API详解

下面我们通过讲解$q的API让你更多的了解promise异步编程模式.$q是做为angularjs的一个服务而存在的,只是对promise异步编程模式的一个简化实现版,源码中剔除注释实现代码也就二百多行,下面开始介绍$q的API. defer对象(延迟对象)可以通$q.defer()获取,下面是defer对象的api:  方法: resolve(value):向promise对象异步执行体发送消息告诉他我已经成功完成任务,value即为发送的消息. reject(value): 向promise

angularjs $q、$http 处理多个异步请求

在实际业务中经常需要等待几个请求完成后再进行下一步操作.但angularjs中$http不支持同步的请求. 解决方法一: $http.get('url1').success(function (d1) { $http.get('url2').success(function (d2) { //处理逻辑 }); }); 解决方法二: then中的方法会按顺序执行. var app = angular.module('app',[]); app.controller('promiseControl'

Image Retrieval Using Customized Bag of Features

This example shows how to create a Content Based Image Retrieval (CBIR) system using a customized bag-of-features workflow. Introduction Content Based Image Retrieval (CBIR) systems are used to find images that are visually similar to a query image.

下载中心常见问题解答【Q&A帮助】

公告 1.下载中心不支持迅雷以及各个浏览器(如360.猎豹等)自带的加速模块下载,如果您正在使用,请关闭后再下载. 2. 本文内容较多,可利用"Ctrl+F"进行搜寻,如果没有找到您想知道的问题,请留言提出,我们会及时答复您.如果您的问题具有代表性,将会采纳入正文中.本文中已做出解答的问题,请不要重复提问. 下载常见问题 1.Q:为什么下载的资料提示解压错误?而且只有7KB? A:如果无法打开附件并提示解压报错,可以已下载的附件大小和资料原本标注的大小是否一致,如果资料下载完只有7KB

promise和Angular中的 $q, defer

在ES6语法中,新出了promise构造函数, 可用来生成promise实例. Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作).有了promise对象, 可以将异步操作以同步的流程表达出来, 避免了层层嵌套的回调函数(俗称'回调地狱'). 在Angularjs中,对象deferred 实例也可以暴露派生的Promise 实例.以下将对此作简单描述: 1. $q: $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(

《阿Q正传》读后感

kindle大法好. 利用坐车的时间阅读完了鲁迅先生写的<阿Q正传>, 心中感慨良多, 记下等以后翻看这些摸不着的回忆吧. 我没看过实体书版, 电子书版的<阿Q正传>注解很详细, 不过因为自身文化水平有限以及对那个时代并没有研究,还是有些词汇尚不能理解. 结合如今中国来看, 其实还能够琢磨点"阿Q"的影子. 教育制度使然, 我想在未来很多年里, "阿Q"并不会随着时间而变少. 文中情节明显高涨是从阿Q欺负小尼姑开始, 当然高潮是在革命章节,

python学习笔记-Day022 - F,Q

django中还有一个 F 和一个 Q 导入方式 from django.db.models import F 关于F : 使用方法 F 比较好说, 他是用来指定表中的字段的, 比如说 table01 中的 size 字段加 1 的时候 , 在SQL 中的语句是 update table01 set size = size +1 django中 的则是 models.table01.objects.all().update(size = F("size")+1) F("siz

野兽的Angular Api 学习、翻译及理解 - - $q 承诺与延迟

野兽的ng api学习 -- $q $q 一个帮助处理异步执行函数的服务.当他们做完处理时,使用它们的返回值(或异常). 受 Kris Kowa’s Q 的启发,这是一个实现promise/deferred对象的启用. $q的两种方式---这是一个更类似于Kris Kowal Q或jQuery的递延实现,另一种在一定程度上类似的ES6承诺. Deferred Api 一个被$q.defer()调用的deferred的新实例. deferred对象的目的是暴露相关承诺实例,以及APIs被执行的成功