Bag of Words (BoW) 词袋模型是一种自然语言处理技术,通过将文本简化为词汇集合来分析文档内容,常用于信息检索、分类和机器翻译等领域。
本demo实现的是基于词袋(BoW)原理对图片进行分类,并通过选取得测试集查找特征。Bag of Words (BoW) 词袋模型最初被用于文本分类,将文档表示为特征向量。其基本思想是忽略文本的词序和语法、句法,只将其视为词汇集合,而每个词汇都是独立的。简单来说就是把每篇文档看成一个袋子(因为里面装的是词汇),然后查看这个袋子里有什么样的词汇,并据此分类。例如,如果一篇文档中包含“猪”、“马”、“牛”、“羊”、“山谷”、“土地”和“拖拉机”,而较少出现像“银行”、“大厦”、 “汽车” 和 “公园”的词汇,则它更可能是一篇描绘乡村的文本。
在 `searchFeatures.py` 中,前面部分主要通过解析参数使得程序可以在命令行中接受传递参数。后面则是提取 SIFT 特征,进行聚类,并计算 TF-IDF 值以得到单词直方图,在此之后再做 L2 归一化处理。一般情况下,一幅图像会包含大量的 SIFT 特征点;如果图片库很大,则特征数量非常庞大,直接对这些特征进行聚类是极其困难的(内存不足且计算速度慢)。因此,为了解决这个问题,可以牺牲检索精度,在聚类时先对 SIFT 进行降采样处理。最后保存一些在在线查询中会用到的变量。
对于某个图像库,可以通过命令行生成 BoF (Bag of Features) 。`query.py` 只能每次查找一张图片,并返回与之匹配度最高的 6 张图片(按递减顺序)。