我目前正在编写一个基于视觉词的图像检索系统,它类似于文本检索中的向量空间模型。在这个框架下,每个图像用一个向量表示(在文献中有时也称为直方图)。基本上,向量中的每个数字都计算了每个"视觉单词"在该图像中出现的次数。如果两幅图像的向量"接近"在一起,这意味着它们有许多共同的图像特征,因此是相似的。
我基本上试图为一组这样的向量创建反向文件索引。我想要的东西,可以从数千(在试用阶段)扩展到数十万或百万+图像,这样一个自制的数据结构黑客将不起作用。
我看过Lucene,但显然它只索引文本(纠正我,如果我错了),而在我的情况下,我希望它索引数字(即向量本身)。我见过这样的情况,人们通过以下方式将矢量转换为文本文档:
<3,6,…,> -> "w1 w2…wn"。基本上,任何非零的组件都被文本单词"w[n]"取代,其中n是该数字的索引。这个"文档"然后被传递给Lucene进行索引。
使用这种方法的问题是,向量的文本表示没有编码特定"单词"出现的频率,因此检索到的图像的排名不会很好。
有没有人知道一个成熟的索引API,可以处理向量,或者可能建议一个不同的编码方案,我的向量,以便我可以继续使用Lucene?我也看了Lucene的图像检索(live)项目,并尝试了它带来的演示,但当我运行该演示时产生的异常数量使我不确定是否使用它。
至于API语言,我对c++或Java都持开放态度。
提前感谢您的回复。
你可以试试GRire,它是一个实现了Bag of Visual Words模型的Java库。这是我的项目,我目前正在努力实现一个倒排索引。