文章目录
一 . 环境安装
1.1 项目形式
要将项目和以下几个文件放在一起
first1000 为1000张图片数据集;
1.2 一些要修改的地方
- 在anaconda文件夹中找到:
可以看到一个sqlite3的包,说明anaconda2自带数据库包,不需要安装pysqlite库,所以需要更改PCV\imagesearch中的imagesearch.py文件第三行为from sqlite3 import dbapi2 as sqlite就行; - 有关sift在之前的实验项目里直接使用即可;
二 . 基于BOW图像检索原理
2.1 BOF(Bag of features)原理
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更多地是用于图像分类或对象识别。在上述思路下对训练集提取Bag-of-Features特征,在某种监督学习(如:SVM)的策略下,对训练集的Bag-of-Features特征向量进行训练,获得对象或场景的分类模型;对于待测图像,提取局部特征,计算局部特征与词典中每个码字的特征距离,选取最近距离的码字代表该特征,建立一个统计直方图,统计属于每个码字的特征个数,即为待测图像之Bag-of-Features特征;在分类模型下,对该特征进行预测从实现对待测图像的分类。
从文本挖掘中获取灵感——矢量空间模型
矢量空间模型(也称BOW模型)是一个用于表示和搜索文本文档的模型。BOW模型基本上可以用于任何对象类型,包括图像。这些矢量是由文本词频直方图构成,即矢量包含了每个单词出现的次数,而且在其他地方包含很多0元素。BOW模型是忽略了单词出现的顺序及位置。
通过单词计数来构成文档直方图向量,从而建立文档索引。由于每篇文档长度不同,故以直方图总和和将向量归一化成单位长度。对于直方图向量中的每个元素可根据每个单词的重要性赋予相应的权重,通常数据集中的一个单词的重要性与它在文档中出现的次数成正比,与在数据集出现次数成反比。
2.2 创建视觉单词
2.2.1 SIFT算法提取特征,创建视觉单词词汇
对于计算机而言,不能同人一样具有主观意识对图像之间进行区分,而无法把两张相似或不相似的图片进行区分,这时就需要进行机器学习,学习 “视觉词典(visual vocabulary)对图像进行“身份证”标记