我正在开发一个基于相似度的C++/Qt图像检索系统,它的工作原理如下(我将尽量避免无关或离题的细节):
我收集了一组图像,并使用OpenCV函数从它们构建了一个索引。之后,对于每个图像,我都会得到一个整数值列表,这些值代表每个图像所属的重要“类”。两个图像共有的整数越多,就越被认为是相似的。因此,当我想要查询系统时,我只需计算表示查询图像的整数列表,执行全文搜索(或类似)并检索X个最相似的图像。
我的问题是,什么是实现这种搜索的最好方法?我听说过Lucene,Lemur和其他索引方法,但我不知道这种全文搜索是否是最好的方式,因为域名被缩小了(只有整数而不是单词)。我想知道在效率、准确性或C++友好性方面的替代方案。
谢谢!
发布于 2011-09-15 04:19:15
我听起来像是你有一个vectorspace model,所以Lucene或类似的产品可能对你很好。通常,如果满足以下条件,倒排索引模型将是很好的:
如果您的问题不符合这些标准,那么正常的关系数据库可能会工作得更好,正如Thomas所建议的那样。如果它满足#1而不是#2,那么您可以研究一个“面向列”的非关系数据库。我对它们还不够熟悉,无法告诉您它们的工作效果如何,但我的直觉是,您需要自己复制IR工具包中的许多功能。
Lucene是用Java语言编写的,我不知道有什么C++端口。Solr将Lucene公开为web服务,因此从您选择的任何语言都可以很容易地访问它。
我不太了解Lemur,但它看起来有一个类似的向量空间模型,而且它是用C++编写的,所以对你来说可能更容易使用。
发布于 2011-12-15 13:16:09
您可以在此处查看Lucene for image retrieval (LIRE):http://www.semanticmetadata.net/2006/05/19/lire-lucene-image-retrieval-04-released/
如果我错了,你正在尝试实现一个典型的词袋图像检索,我说的对吗?如果是这样的话,您可能正在尝试构建一个倒排文件索引。Lucene本身并不适合,因为你可能已经意识到它索引的是文本而不是数字。使用它的类来查询索引也是一个问题,因为它不是被设计成“解析”(即检测关键点,提取描述符,然后向量量化)图像到查询向量中。
另一方面,LIRE已被修改为索引特征向量。然而,对于bag of words模型,它似乎不是开箱即用的。此外,我想我已经在作者的网站上看到,它目前使用蛮力匹配而不是倒排文件索引来检索图像,但我希望它比Lucene本身更容易扩展以达到您的目的。
希望这能有所帮助。
https://stackoverflow.com/questions/7394420
复制相似问题