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