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

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%的量,一次图片查询需要进行的特征查询次数亦不容小窥。那么有没有方法可以将任意图片的所有特征向量用一个固定维数的向量表出,且这个维数并不因图片特征点数不同而变化?本篇要讲到的方法可以解决这个问题,尽管它并不是因这个问题而生的。

Bag-of-Words模型源于文本分类技术,在信息检索中,它假定对于一个文本,忽略其词序和语法、句法。将其仅仅看作是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现,或者说这篇文章的作者在任意一个位置选择词汇都不受前面句子的影响而独立选择的。

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

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。

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、构建视觉词典:

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

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

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

时间: 2024-10-27 01:51:00

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

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.

基于HSV分块颜色直方图的图像检索算法

引 言 随着多媒体技术及[nternet技术的迅速发展,各行各业对图像的使用越来越广泛,图像信息资源的管理和检索显得越来越重要.传统的通过手工标记和索引图像(即基于文本的图像检索)的方法已经不能满足人们的需求,随之而来的问题是:随着图像数据的剧增和人们对图像的理解具有不同的侧重点,不同的人从不同的角度对同一幅图像的认识可能存在很大的差异性,因此无法准确反映图像信息.基于内容的图像检索方法(Content-Based Image Retrieval,CBIR)由此应运而生. 在基于内容的图像检索中

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

先贴上这两天刚出炉的C++代码.(利用 STL 偷了不少功夫,代码尚待优化) Head.h 1 #ifndef HEAD_H 2 #define HEAD_H 3 4 #include "D:\\LiYangGuang\\VSPRO\\MYLSH\\HashTable.h" 5 6 7 #include <iostream> 8 #include <fstream> 9 #include <time.h> 10 #include <cstdli

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

最开始仿真和精度测试,基于 matlab 完成的. Demo_MakeTable.m (生成 Hash 表) %======================================== %*********************************** %******* 设定参数: ***************** %******* l : hash表个数 ******** %******* k : 各表关键字个数 ******* %=======================

图像检索算法

图像检索:是从一堆图片中找到与待匹配的图像相似的图片,就是以图找图. 看了两篇文章: Large-Scale Image Retrieval with Attentive Deep Local Features   https://arxiv.org/pdf/1612.06321v4.pdf Aggregated Deep Local Features for Remote SensingImage Retrieval  https://arxiv.org/pdf/1903.09469.pdf

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

在LIRe中主要实现的图像特征有:        1.       RGB和HSV空间的颜色直方图:        2.       MPEG-7的颜色特征,包括Scalable color,Color layout和Edge Histogram:        3.       Tamura纹理特征,包括粗糙度(Coarseness),对比度(Contrast)和方向度(Directionality):        4.       颜色和边缘的方向性描述符(Color and edge d

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

iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法.由INRIA的IEAR实验室于2013年发表于ICCV.目前基于深度学习的行为识别算法效果已经超过了iDT算法,但与iDT的结果做ensemble总还是能获得一些提升.所以这几年好多论文的最优效果都是"Our method+iDT"的形式. 此前由于项目原因,对iDT算法进行了很多研究和实验,故此处对其核心思路与一些实施的细节进行总结,方便后续回顾,也希望能够在此过程中获得一些新的启发. 介绍的内

图像检索:基于形状特征的算法

本文节选自<基于形状特征的图像检索算法研究> 基于形状特征的图像检索算法相对于颜色特征和纹理特征来说,使用的稍微少一些.摘录了其中的几种算法,不做深入剖析了. 形状通常与图像中的特定目标对象有关,是人们的视觉系统对目标的最初认识,有一定的语义信息,被认为是比颜色特征和纹理特征更高一层的特征.形状描述的准确与否是决定图像检索算法优劣的重要因素,一个好的形状描述符应具备独特性.完备性.几何不变性.灵活性以及抽象性.形状的描述符大体可以分为两大类:第一类是描述形状目标区域边界轮廓的像素集合,称为基于

使用BOF实现动物分类:matlab版本

1.训练集测试集划分(同上一篇) 2.代码部分 1)训练部分代码:training.m %% 该函数是使用Bag of Features来提取test_images下图片的特征的,代码编写参考matlab官方文档 % 内部采用k-means训练,可能需要点时间 %% 1.获取图片以及相关的分类 currentPath = pwd; % 获得当前的工作目录 imds = imageDatastore(fullfile(pwd,'train_images'),... 'IncludeSubfolde