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

一、实验原理

1、Bag-of-Features模型仿照文本检索领域的Bag-of-Words方法,把每幅图像描述为一个局部区域/关键点(Patches/Key Points)特征的无序集合。使用某种聚类算法(如K-means)将局部特征进行聚类,每个聚类中心被看作是词典中的一个视觉词汇(Visual Word),相当于文本检索中的词,视觉词汇由聚类中心对应特征形成的码字(code word)来表示(可看当为一种特征量化过程)。所有视觉词汇形成一个视觉词典(Visual Vocabulary),对应一个码书(code book),即码字的集合,词典中所含词的个数反映了词典的大小。图像中的每个特征都将被映射到视觉词典的某个词上,这种映射可以通过计算特征间的距离去实现,然后统计每个视觉词的出现与否或次数,图像可描述为一个维数相同的直方图向量,即Bag-of-Features。
Bag of features(BOF)图像检索算法_第1张图片
2、Bag-of-Features更多地是用于图像分类或对象识别。对训练集提取Bag-of-Features特征,在某种监督学习(如:SVM)的策略下,对训练集的Bag-of-Features特征向量进行训练,获得对象或场景的分类模型;对于待测图像,提取局部特征,计算局部特征与词典中每个码字的特征距离,选取最近距离的码字代表该特征,建立一个统计直方图,统计属于每个码字的特征个数,即为待测图像之Bag-of-Features特征;在分类模型下,对该特征进行预测从实现对待测图像的分类。
Bag of features(BOF)图像检索算法_第2张图片
3、Bag of feature:单词的TF-IDF权重:
Bag of features(BOF)图像检索算法_第3张图片
4、Bag of feature:倒排表
可以快速使用倒置文件来计算新图像与数据库中所有图像之间的相似性 (只考虑其箱子与查询图像重叠的数据库图像)

二、实验步骤

1、特征提取(sift)
2、学习“视觉词典”(visual vocabulary)
3、针对输入特征集,根据视觉词典进行量化
4、把输入图像根据TF-IDF转化成视觉单词的频率直方图
5、构造特征到图像的倒排表,通过倒排表快速索引相关的图像
6、根据索引结果进行直方图匹配

三、实验代码操作

1、生成代码所需要的模型文件

开始前需要先配置好sift
在这里插入图片描述

2、将模型数据导入数据库

1、将所有图片资料放在数据库中要使用python中的pysqlite库,需要自己安装。
python3下载pysqlite可以打开cmd命令行输入这个命令来下载pysqlite3:pip install sqlite-web
如果使用anaconda自带的python就用这个命令:conda install sqlite-web

3、测试

执行完代码后会出现如下两张图片:
Bag of features(BOF)图像检索算法_第4张图片

4、建立演戏程序及Web应用

需要先下载CherryPy包,然后还需要配置文件service.conf,这是一个web服务器的配置文件,内容如下:
[global] server.socket_host = “127.0.0.1” server.socket_port = 8080 server.thread_pool = 50 tools.sessions.on = True [/] tools.staticdir.root = “E:/Python/pythonwatch/pcv-book-code-master/ch07” tools.staticdir.on = True tools.staticdir.dir = “”
文件里面的tools.staticdir.root的路径为你运行的代码文件的路径。
就可以显示我们搜索的图片:
Bag of features(BOF)图像检索算法_第5张图片
Bag of features(BOF)图像检索算法_第6张图片
只要你点击其中任意一张图片它就可以显示出所有与它最相似的十张图片。
参考:Bag of Feature (BOF)图像检索算法

你可能感兴趣的:(Bag of features(BOF)图像检索算法)