计算机视觉——Bag Of features图像检索

  • 原理
    • 什么是图像检索
    • 什么是Bag Of Word模型
    • 什么是sift特征提取
    • 什么是视觉词典
    • 什么是TF-IDF
    • 基于BOW的图像检索步骤
  • 结果与分析
    • 10维
    • 100维
    • 1000维
    • 5000维
    • 分析
  • 总结
  • 遇到的问题及解决

原理

什么是图像检索

图像检索就是基于图像的某一特征对其他图片进行匹配检索。从20世纪70年代开始,有关图像检索的研究就已开始,当时主要是基于文本的图像检索技术(Text-based Image Retrieval,简称TBIR),利用文本描述的方式描述图像的特征,如绘画作品的作者、年代、流派、尺寸等。到90年代以后,出现了对图像的内容语义,如图像的颜色、纹理、布局等进行分析和检索的图像检索技术,即基于内容的图像检索(Content-based Image Retrieval,简称CBIR)技术。在这里我们主要讨论的是基于内容的图像检索BOW(bag of words)模型最初应用于文本处理领域,用来对文档进行分类和识别。

什么是Bag Of Word模型

Bagofwords模型,也叫做“词袋”,在信息检索中,Bag of words model假定对于一个文本,忽略其词序和语法、句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现,或者说当这篇文章的作者在任意一个位置选择一个词汇都不受前面句子的影响而独立选择的。
这种假设虽然对自然语言进行了简化,便于模型化,但是其假定在有些情况下是不合理的,例如在新闻个性化推荐中,采用Bag of words的模型就会出现问题。例如用户甲对“南京醉酒驾车事故”这个短语很感兴趣,采用bag of words忽略了顺序和句法,则认为用户甲对“南京”、“醉酒”、“驾车”和“事故”感兴趣,因此可能推荐出和“南京”,“公交车”,“事故”相关的新闻,这显然是不合理的。
在图像检索中,将图片分割成若干小块,再聚类成“词袋”中的若干个基础图片单词。

什么是sift特征提取

详见 计算机视觉——SIFT特征提取与检索.

什么是视觉词典

对于已经提取的图像特征进行遍历,并利用聚类方法(本次实验使用K-Means算法)将其投影到词汇上,特征描述子分为K个簇,以使簇内具有较高的相似度,而簇间相似度较低,将词义相近的词汇合并,作为单词表中的基础词汇,聚类类别的数量K即为整个视觉词典的大小基础词汇的个数。提交至数据库,由此产生该图片群的视觉词典。

什么是TF-IDF

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
在图像检索中,这种方法有利于判断图像特征在一张图像中的占比,对于在很多图像中都存在的特征,将其频率下调以表示该特征是普遍特征,并不能作为检索图像的关键线索。

基于BOW的图像检索步骤

1.构造不小于100张图片的数据集
2.针对数据集,做SIFT特征提取
3.根据SIFT特征提取结果,采用k-means算法学习“视觉词典(visual vocabulary)”,其中维度至少满足4个量级
4.根据IDF原理, 计算每个视觉单词的权重
5.针对数据库中每张图片的特征集,根据视觉词典进行量化以及TF-IDF解算。每张图片转化成特征向量
6.对于输入的检索图像(非数据库中图片),计算SIFT特征,并根据TF-IDF转化成频率直方图/特征向量
7.构造检索图像特征到数据库图像的倒排表,快速索引相关候选匹配图像集
8.针对候选匹配图像集与检索图像进行直方图/特征匹配

结果与分析

利用不同维度计算出的视觉词典来对图像进行索引,即在生成词汇表时修改函数voc.train(featlist,1000,10) 中的第二个参数,得到的结果如下:
待检索的图片:

10维

常规检索:

重排后检索:

100维

常规检索:

重排后检索:

1000维

常规检索:

重排后检索:

5000维

常规检索:

重排后检索:

分析

本次实验数据集有100张图片,在这100张图片中大约有20种左右的物品,每种物品拍摄4-6张图片。上述例子选取的待检索图片在数据集中是拍摄了5张图片,因此我也是将查询返回的图像数设为5.
从上述结果可以看出,k-means聚类算法学习出的视觉词典,当维度不同的时候检索的结果也有很大不同。因为数据集中物品类别比较多,因为若是维度太小(10维)的时候,就会导致聚类不清,很多不同类别的物品有可能因为同有一些非常普遍的特征而被分到了一类中,这就导致了检索的效果十分的不理想,5张搜索的图片里全是与目标图片无关的。随着维度慢慢增加(从10维到100维到1000维),这检索的效果越来越理想,100维时,还尚有一张图片是错误的,1000维时就能正确匹配到所有的图像了。但是维度过大(5000维)也不是绝对的好,这时候几乎每一个物品的每一张图片都被分成一类,过拟合了,也是会使检索的结果不理想的。
在上述例子里,重拍的结果与常规结果没什么差别。但是通过分析原理,我认为,重排时利用ransac算法去除错误的匹配点有可能会去除真正的错误点让结果更加合适,但也有可能去除了正确的匹配点。又试了几组图片后发现本次没有得出重排与常规算法不同的结果有可能是因为准备的数据集不够充分,比如说有些图片特征明显,匹配的点多,检索的正确率就高了,有些图片特征不明显,匹配的点少,自然在去除错误匹配点的时候ransac算法也起不到什么作用,就没有准备那种有可能有错误点供去除的图片。

总结

通过本次实验,我又深刻的认识到聚类算法中聚类中心个数对于聚类的重要性,如果太少,会导致欠拟合,就不能有一个正确的聚类结果,但是太多又会导致过拟合,聚类出来的结果也是不理想的,因此应该根据实际特征数选择合适的聚类中心数。还有就是准备的数据集要充分考虑所有情况的发生,不能为了准确率而故意准备某些类型的图片,每一种情况都要考虑到,所对应的数据也要准备好。

遇到的问题及解决

  1. TypeError: a bytes-like object is required, not ‘str’
    原因是在这里,python3和Python2在套接字返回值解码上有区别。python3需要字节类型对象而不是字符串
    解决:改为pickle.loads(s[0]),不要转换为str
  2. TypeError: ‘cmp’ is an invalid keyword argument for this function
    原因是Python3下的sort函数把cmp参数给取消掉了。
    解决:用functools.cmp_to_key()来代替
  3. NameError: name ‘cmp’ is not defined
    原因是版本中已经没有cmp函数,被operator模块代替,在交互模式下使用时,需要导入模块。
    解决:将cmp改为operator.eq()

计算机视觉——Bag Of features图像检索相关推荐

  1. 计算机视觉——Bag of features

    一.Bag of features 1.1 Bag of features概述 BOF方法源自于文本处理的词袋模型.Bag-of-words model (BoW model) 最早出现在NLP和IR ...

  2. 【计算机视觉实验五】图像检索与识别

    一.图像特征匹配 暴力匹配法:十分耗时,对于大数据集根本不能用 对于大场景数据集(如城市场景), 只有少 于 0.1% 的图像对具有匹配关系 解决方案: 利用图像整体特征实现匹配/检索, 而非局部特征 ...

  3. Python计算机视觉——基于BOW的图像检索

    基于BOW的图像检索 一.图像检索概述 1.1 基于文本的图像检索(TBIR) 1.2 基于内容的图像检索(CBIR) 1.2.1 矢量空间模型(BOW表示模型.Bag of Words) 1.2.2 ...

  4. 计算机视觉——基于BOW的图像检索(作业六)

    文章目录 一.图像检索概述 (一)基于内容的图像检索(CBIR) 1.矢量空间模型(BOW表示模型.Bag of Words) 2.视觉单词 (二)Bag of features 1.Bag of f ...

  5. Bag of Features (BOF)图像检索算法

    FROM:http://blog.csdn.net/loadstar_kun/article/details/39450137 1.首先,我们用surf算法生成图像库中每幅图的特征点及描述符. 2.再 ...

  6. Bag Of Features(BOF)图像检索方法

    文章目录 1. BOF原理 实验内容 数据集 实验代码 实验结果 总结 遇到的问题 1. BOF原理 Bag of features(Bof)一种是用于图像和视频检索的算法.要了解Bag Of Fea ...

  7. OpenCV精进之路(二十三):实例——Bag of Features(BoF)图像分类实践

    在深度学习在图像识别任务上大放异彩之前,词袋模型Bag of Features一直是各类比赛的首选方法.首先我们先来回顾一下PASCAL VOC竞赛历年来的最好成绩来介绍物体分类算法的发展. 从上表我 ...

  8. 基于python3计算机视觉编程(八)BOW图像检索

    BOW图像检索 一. 图像检索简介 二. 检索的分类 三. BOW图像检索 3.1 BOW原理简述 3.2 算法实现步骤 (1) 特征提取 (2) 学习"视觉词典"visual v ...

  9. 计算机视觉-基于BOW的图像检索

    文章目录 一.Bag-of-words模型原理 二.K-means 聚类算法 三.实验步骤 1.提取SIFT特征.生成视觉词典 2.视觉词典进行量化生成数据库 3. 图像检索 一.Bag-of-wor ...

最新文章

  1. 微软官方教程教你如何在Windows上做Python开发?
  2. 来和小伙伴一起学习响应式网页设计吧
  3. COMBO--组合拳打穿回调地狱~
  4. OpenMap教程4 –图层
  5. oracle regr,oracle 分析函数
  6. Spark性能优化指南——高级篇
  7. 会员体系架构的设计思路
  8. 数据结构之队列的定义与简单实现
  9. 怎么切换java版本吗_Java切换JDK版本的方法及技巧
  10. rabbitmq 更细致的过滤
  11. Cocos2d Box2D之简介
  12. 大学计算机信息技术课程评价,信息技术课程学习心得体会精选范文
  13. C语言 将大写字母转换为小写字母
  14. excel怎么设置自动计算_最新个税计算Excel模版,含专项扣除 (自动生成),人手一份...
  15. 【目标检测】57、Dual Weighting Label Assignment | 专为目标检测设计的双权重标签分配
  16. yocs_velocity_smoother速度平滑配置与使用
  17. 6、网关 复杂分支流程
  18. docker 创建容器时指定容器ip
  19. Google Earth Engine(GEE)——可视化动态图
  20. UI应该怎么学?有哪些方式呢?

热门文章

  1. 自动驾驶领域的Android?百度能否超越特斯拉和谷歌
  2. linux时间间隔计算
  3. html中如何访问ftp中的图片,CSS FTP上传网页图解教程
  4. python把日期数据转换成数字_python3时间datetime如何转换成数字?
  5. 服务器版本的ansys证书错误,关于ANSYS Workbench 出现证书错误的解决办法
  6. python idle是什么_python中idle是什么意思
  7. React Api请求最佳实践react-query3使用教程(比swr更好用更强大)
  8. 风控贷款---年龄因素
  9. Debain 安装SVN服务器 支持http/https 全程指导
  10. android 获得ram大小,Android中获取(RAM)总运存大小跟可用运存大小