利用文本挖掘技术对基于图像视觉内容进行图像搜索。
矢量空间模型,是用来表示和搜索文本文档的模型。矢量包含每个单词出现的次数,而在其他地方包含很多0元素。我们忽略单词出现的顺序及位置(研究表明,单词顺序不一定会影响到我们的阅读)。该模型也被称为BOW(Bag of words)表示模型。
一、BOW模型实验步骤
1.1 用sift方法提取特征点
1.2 学习“特征词典”
我们从一个训练集中提取特征描述子,利用K-Means聚类算法得到的视觉单词是聚类质心。
K-Means算法:首先先初始化N个聚类中心(下图是N=3)。重复下面步骤直至算法收敛:对应每个特征,最小化每个特征 xi 与其相对应的聚类中心 mk之间的欧式距离,将该特征赋予给某个类别。对每个类别的特征集重新计算其的聚类中心。
1.3 针对输入特征集,根据视觉词典进行量化
K-Means算法得到的聚类中心称为codevector。对于输入特征,量化的过程是将该特征映射到距离其最接近的 codevector ,并实现计数。
1.4 把输入图像,根据TF-IDF转化成视觉单词(visual words)的频率直方图
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力。也就是我们TF-IDF的思想计算一个视觉单词在该图片中出现的频率,据此得到一张图片的视觉单词的频度直方图。
词w在文档d中的词频TF(Term Frequency),即词w在文档d中出现次数count(w, d)和文档d中总词数size(d)的比值:TF(w,d) = count(w, d) / size(d)。
词w在整个文档集合中的逆向文档频率IDF(Inverse Document Frequency),即文档总数n与词w所出现文件数docs(w, D)比值的对数:IDF = log(n / docs(w, D))。
TF-IDF模型根据TF和IDF为每一个文档d和由关键词w[1]…w[k]组成的查询串q计算一个权值,用于表示查询串q与文档d的匹配度:TF-IDF(q, d) = sum { i = 1…k | TF(w[i], d) * IDF(w[i]) }。
1.5 构造特征到图像的倒排表,通过倒排表快速索引相关图像
倒排索引是指由属性值来确定记录的位置。在本实验中,我们构造视觉单词(特征)到图像的倒排表,便于我们通过找到相似的特征,再找到相关图现象
1.6 根据索引结果进行直方图匹配
二、实验结果分析
首先载入图像列表,特征列表(分别包含图像文件名和SIFT特征文件)及词汇。
from PCV.geometry import homography
from PCV.tools.imtools import get_imlist
# load image list and vocabulary
#载入图像列表
imlist = get_imlist('first1000/')
nbr_images = len(imlist)
#载入特征列表
featlist = [imlist[i][:-3