基本思路
- 使用聚类算法对数据集图像的特征点描述子进行分类,得到类别a1、a2、a3……,称这些类别为“word”,不分顺序,故为“bag”,而非“list”。
- 将新图像的特征点描述子与数据集进行匹配,看它含有多少个word,并且对这些word加权重,得到一个包含多个word及对应权重的向量v。
- 对比不同图像的词向量v,利用相似度评价方法,确定两个图像的相似程度。
简言之,分类-匹配-比较
词袋的构建和查询
朴素的聚类算法:K-means
词袋中的单词规模是很大的,如何快速查词呢?比较简单的是k叉树,它时k-means的扩展。
假设由N个特征点,我们可以对其分为k个类,这k个类各自又可以继续分为k个类,深度d可以自己决定,最开始的N个特征点称为“根”,经过d层后得到的众多分类称为“叶”。
在查找某个特征对应的单词时,只需要逐层筛选,经过d次即可到达叶端,找到目标。
权重和相似度
不同的单词在图像的区分上的重要程度不一样,如“文档”“足球”就比“的”“是”等词更能代表一个句子的意义,因此必须对word加权重。
常用的加权重方法是TF-IDF(Term Frequency-Inerse Document Frequency)。
TF:单词在一幅图像中出现的频率。
IDF:单词在词袋中出现的频率。
其思想是:如果某单词在一幅图像中出现的频率很高或在词袋中出现的频率很低,说明它区分度很高。
假设某图像含有n个单词,单词
假设数据集有m类单词,单词
单词
这样我们就可用一个含有多个单词及对应权重的向量来描述一幅图
如何计算
可以利用范数(方法不一)比如: