1.首先。我们用surf算法生成图像库中每幅图的特征点及描写叙述符。

2.再用k-means算法对图像库中的特征点进行训练,生成类心。

3.生成每幅图像的BOF。详细方法为:推断图像的每一个特征点与哪个类心近期。近期则放入该类心,最后将生成一列频数表。即初步的无权BOF。

4.通过tf-idf对频数表加上权重,生成终于的bof。(因为每一个类心对图像的影响不同。比方超市里条形码中的第一位总是6,它对辨别产品毫无作用。因此权重要减小)。

5.对query进来的图像也进行3.4步操作,生成一列query图的BOF。

6.将query的Bof向量与图像库中每幅图的Bof向量求夹角,夹角最小的即为匹配对象。

图像检索中应用LSH实现高速搜索。其在一定概率的保证下攻克了高维特征查询的问题,但笔者在应用LSH结合SIFT特征实践图像检索实验时,因为每张图像涉及上百个特征,那么在查询一张图片时,须要进行上而次的特征查询,即便是将查询图片的特征点数筛选至50%的量,一次图片查询须要进行的特征查询次数亦不容小窥。那么有没有方法能够将随意图片的全部特征向量用一个固定维数的向量表出,且这个维数并不因图片特征点数不同而变化?本篇要讲到的方法能够解决问题,虽然它并非因这个问题而生的。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hsZWxlMDEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="这里写图片描写叙述" title="">

Bag-of-Words模型源于文本分类技术,在信息检索中,它假定对于一个文本,忽略其词序和语法、句法。

将其只看作是一个词集合,或者说是词的一个组合。文本中每一个词的出现都是独立的,不依赖于其它词是否出现,或者说这篇文章的作者在随意一个位置选择词汇都不受前面句子的影响而独立选择的。



图像能够视为一种文档对象,图像中不同的局部区域或其特征可看做构成图像的词汇,当中相近的区域或其特征能够视作为一个词。这样,就能够把文本检索及分类的方法用到图像分类及检索中去。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hsZWxlMDEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="这里写图片描写叙述" title="">

Accelerating Bag-of-Features SIFT Algorithm for 3D Model Retrieval

Bag-of-Features模型仿照文本检索领域的Bag-of-Words方法,把每幅图像描写叙述为一个局部区域/关键点(Patches/Key Points)特征的无序集合。使用某种聚类算法(如K-means)将局部特征进行聚类。每一个聚类中心被看作是词典中的一个视觉词汇(Visual Word)。相当于文本检索中的词。视觉词汇由聚类中心相应特征形成的码字(code word)来表示(可看当为一种特征量化过程)。全部视觉词汇形成一个视觉词典(Visual Vocabulary),相应一个码书(code book),即码字的集合,词典中所含词的个数反映了词典的大小。图像中的每一个特征都将被映射到视觉词典的某个词上,这样的映射能够通过计算特征间的距离去实现,然后统计每一个视觉词的出现与否或次数。图像可描写叙述为一个维数相同的直方图向量,即Bag-of-Features。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hsZWxlMDEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">http://img.blog.csdn.net/20131002212031828?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hsZWxlMDEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Bag of Features Codebook Generation by Self-Organisation

Bag-of-Features很多其它地是用于图像分类或对象识别。在上述思路下对训练集提取Bag-of-Features特征,在某种监督学习(如:SVM)的策略下。对训练集的Bag-of-Features特征向量进行训练,获得对象或场景的分类模型。对于待測图像,提取局部特征,计算局部特征与词典中每一个码字的特征距离。选取近期距离的码字代表该特征。建立一个统计直方图。统计属于每一个码字的特征个数,即为待測图像之Bag-of-Features特征。在分类模型下,对该特征进行预測从实现对待測图像的分类。

Classification Process

1、局部特征提取:通过切割、密集或随机採集、关键点或稳定区域、显著区域等方式使图像形成不同的patches。并获得各patches处的特征。



当中,SIFT特征较为流行。



2、构建视觉词典:



由聚类中心代表的视觉词汇形成视觉词典:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hsZWxlMDEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="这里写图片描写叙述" title="">

3、生成码书。即构造Bag-of-Features特征,也即局部特征投影过程:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hsZWxlMDEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="这里写图片描写叙述" title="">

4、SVM训练BOF特征得分类模型,对待測图像BOF特征预測:



Retrieval Process

Bag-of-words在CV中的应用首先出如今Andrew Zisserman[6]中为解决对视频场景的搜索,其提出了使用Bag-of-words关键点投影的方法来表示图像信息。

兴许很多其它的研究者归结此方法为Bag-of-Features。并用于图像分类、目标识别和图像检索。

在Bag-of-Features方法的基础上,Andrew Zisserman进一步借鉴文本检索中TF-IDF模型(Term Frequency一Inverse Document Frequency)来计算Bag-of-Features特征向量。

接下来便能够使用文本搜索引擎中的反向索引技术对图像建立索引,高效的进行图像检索。



Hamming embedding and weak geometric consistency for large scale image search

实现检索的过程同分类的过程无本质的差异,很多其它的是细节处理上的差异:

1、局部特征提取。

2、构建视觉词典。

3、生成原始BOF特征;

4、引入TF-IDF权值:

TF-IDF是一种用于信息检索的经常使用加权技术,在文本检索中。用以评估词语对于一个文件数据库中的当中一份文件的重要程度。词语的重要性随着它在文件里出现的频率成正比添加,但同一时候会随着它在文件数据库中出现的频率成反比下降。TF的主要思想是:假设某个关键词在一篇文章中出现的频率高。说明该词语能够表征文章的内容。该关键词在其它文章中非常少出现,则觉得此词语具有非常好的类别区分度,对分类有非常大的贡献。IDF的主要思想是:假设文件数据库中包括词语A的文件越少。则IDF越大,则说明词语A具有非常好的类别区分能力。

词频(Term Frequency。TF)指的是一个给定的词语在该文件里出现的次数。如:tf = 0.030 ( 3/100 )表示在包括100个词语的文档中, 词语’A’出现了3次。

逆文档频率(Inverse Document Frequency。IDF)是描写叙述了某一个特定词语的普遍重要性。假设某词语在很多文档中都出现过,表明它对文档的区分力不强,则赋予较小的权重;反之亦然。如:idf = 13.287 ( log (10,000,000/1,000) )表示在总的10,000,000个文档中,有1,000个包括词语’A’。

终于的TF-IDF权值为词频与逆文档频率的乘积。

5、对查询图像生成相同的带权BOF特征;

6、查询:初步是通过余弦距离衡量,至于建立索引的方法还未学习到,望看客指点。

Issues

1、使用k-means聚类。除了其K和初始聚类中心选择的问题外。对于海量数据,输入矩阵的巨大将使得内存溢出及效率低下。有方法是在海量图片中抽取部分训练集分类,使用朴素贝叶斯分类的方法对图库中其余图片进行自己主动分类。另外,因为图片爬虫在不断更新后台图像集。又一次聚类的代价显而易见。

2、字典大小的选择也是问题,字典过大,单词缺乏一般性,对噪声敏感,计算量大,关键是图象投影后的维数高;字典太小。单词区分性能差,对类似的目标特征无法表示。

3、类似性測度函数用来将图象特征分类到单词本的相应单词上,其涉及线型核。塌方距离測度核。直方图交叉核等的选择。

4、将图像表示成一个无序局部特征集的特征包方法,丢掉了全部的关于空间特征布局的信息。在描写叙述性上具有一定的有限性。为此。 Schmid[2]提出了基于空间金字塔的Bag-of-Features。

5、Jégou[7]提出VLAD(vector of locally aggregated descriptors),其方法是如同BOF先建立出含有k个visual word的codebook。而不同于BOF将一个local descriptor用NN分类到近期的visual word中。VLAD所採用的是计算出local descriptor和每一个visual word(c­i)在每一个分量上的差距,将每一个分量的差距形成一个新的向量来代表图片。

Resources

Two bag-of-words classifiers(Matlab)

Bag of Words/Bag of Features的Matlab源代码

一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo

Bag of Features (BOF)图像检索算法的更多相关文章

  1. OpenCV探索之路(二十八):Bag of Features(BoF)图像分类实践

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

  2. MATLAB 图像分类 Image Category Classification Using Bag of Features

    使用MATLAB实现图像的识别,这是MATLAB官网上面的例子,学习一下. http://cn.mathworks.com/help/vision/examples/image-category-cl ...

  3. Bag of Words/Bag of Features的Matlab源码发布

    2010年11月19日 ⁄ 技术, 科研 ⁄ 共 1296字 ⁄ 评论数 26 ⁄ 被围观 4,150 阅读+ 由于自己以前发过一篇文章讲bow特征的matlab代码的优化的<Bag-Of-Wo ...

  4. LIRe提供的图像检索算法的速度

    本文翻译了LIRe的作者Mathias Lux发表的论文<LIRe: Lucene Image Retrieval - An Extensible Java CBIR Library>.主 ...

  5. 实习日记:图像检索算法 LSH 的总结与分析(matlab)

    最开始仿真和精度测试,基于 matlab 完成的. Demo_MakeTable.m (生成 Hash 表) %======================================== %** ...

  6. 实习日记:图像检索算法 LSH 的总结与分析

    先贴上这两天刚出炉的C++代码.(利用 STL 偷了不少功夫,代码待优化) Head.h #ifndef HEAD_H #define HEAD_H #include "D:\\LiYang ...

  7. 行为识别笔记:improved dense trajectories算法(iDT算法)(转载)

    iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法.由INRIA的IEAR实验室于2013年发表于ICCV.目前基于深度学习的行为识别算法效果已经超过了iDT算法 ...

  8. 浅析 Bag of Feature

    Bag of Feature 是一种图像特征提取方法,它借鉴了文本分类的思路(Bag of Words),从图像抽象出很多具有代表性的「关键词」,形成一个字典,再统计每张图片中出现的「关键词」数量,得 ...

  9. lecture7图像检索-七月在线-cv

    http://blog.csdn.net/u014568921/article/details/52518587 图像相似性搜索的原理 BOW 原理及代码解析 Bag Of Visual Words ...

随机推荐

  1. Android开发之蓝牙(Bluetooth)操作(二)--修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一. 修改本机蓝牙设备的可见性 二. 扫描周围可用的蓝牙设备 Eg: 一.  清单文件AdroidManifest.xml: <?xml v ...

  2. Magento--修改已存在的订单的运费

    遇到一种情况,需要在下单后再由管理员添加订单运费,然后顾客再付款.那么问题来了,如何给订单添加运费呢?下面是一段代码,可以实现该功能: $orderId = 'your order id';$orde ...

  3. 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT

    2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...

  4. 1sting

    You will be given a string which only contains ‘1’; You can merge two adjacent ‘1’ to be ‘2’, or lea ...

  5. Ubunut PPA源概述

    Ubuntu 自带的“软件”应用,可以安装海量软件,既包括发行者支持的软件.社区支持的软件,也包括专有驱动和版权软件.有时,我们需要的软件通过这些渠道仍然无法找到.这时,可以到 PPA 软件源中查找. ...

  6. try{futureGirl}catch(Exception){"Kill All Trouble"}——echarts样式

    首先先给未来女,解释一下题目吧.这是段代码,我再try{}括号里写了你,意思我会保护你.后面的catch(Exception)是捕捉你的所有麻烦,交给我解决. 今天收工较早,拖着疲惫是身躯回到宿舍,简 ...

  7. spring在web.xml中的配置

    在实际项目中spring的配置文件applicationcontext.xml是通过spring提供的加载机制,自动加载的容器中去,在web项目中,配置文件加载到web容器中进行解析,目前,sprin ...

  8. struts2学习笔记(7)---数据验证之validateXxx()方法

    validateXxx()方法 上一篇文章写了使用Action的validate()方法,validate()仅仅能对action的所有方法进行验证.而要实现对action中特定的方法进行验证,就须要 ...

  9. ubuntu adb 安装

    ubuntu 下adb 安装,其实就是下载一个adb,然后给它赋予可执行权限,最后在环境变量里添加一下罢了.具体如下 1.下载adb 这个工具其实是在sdk工具包里面的platform-tools文件 ...

  10. 不仅仅是MVC

    MVC Smart MV Three tier 等等