计算机视觉——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. 多项物联网技术评为即将改变世界的革新技术
  2. 连接LilyPad之Windows平台的驱动
  3. 转:C#动态循环生成button怎么分别写他们的事
  4. matlab读int16读文件_MATLAB: 使用内存映射加快文件读写
  5. Jquery中绑定select的change事件自动填充input的value值
  6. ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
  7. vue(2)子组件和页面组件
  8. java scanner接收数组_java – 使用scanner将文件中的整数读入数组
  9. Java中关于String类型的10个问题
  10. Ubuntu 20 04 提示“检测到系统程序出现问题”
  11. 响应服务器535 5.7.1 unab,带有Gmail的JavaMail:535-5.7.1不接受用户名和密码
  12. 北大青鸟的班主任好当吗_北大青鸟学校怎么样靠谱吗?
  13. soem移植 SOEM源码 基于STM32构建EtherCAT主站
  14. 电脑使用技巧(禁用微软 Windows 10 易升)
  15. 浅显易懂的经济学常识
  16. 源中瑞区块链baas平台一站式服务体系
  17. 从未这么明白的设计模式(三):装饰器模式
  18. 解决springboot整合dubbo中No provider available from registry 127.0.0.1:2181 for service x.x.x on consumer
  19. 网站文章更新频率对SEO影响大吗?
  20. 鸟和飞机都能飞行,使用代码写一个方法完成鸟的子类比如鹰,麻雀的飞行,还有飞机的飞行

热门文章

  1. no more duplicates will be shown
  2. 【逍遥模拟器】注册微信提示环境异常怎么解决?
  3. WINDOWS系统“资源管理器”进程选项关闭之后的解决方法
  4. teracopy php,Unraid 升级到 UnRaid 6.0的详细操作步骤(三)
  5. 中国生物降解塑料行业“十四五”发展规划及未来前景展望报告2021年版
  6. 我的Crystal xcelsius之旅
  7. linux 筛选文件,「Linux基础知识」grep文件内容筛选命令的使用
  8. electron打开系统默认浏览器
  9. Halcon二维码扫描算法总结
  10. 《金融怪杰》读书笔记