我知道这个网站上已经有一些关于这个问题的帖子,但是没有一个(据我所知)告诉我我需要知道的。
我对图像搜索引擎(如Google图像)如何运行基于图像的搜索很感兴趣,到目前为止,我已经找到了这篇博客文章,它告诉用户如何编程出一个指纹功能来找到类似的图像。这个网站上的算法只能找到相同的图像,但不同的分辨率或相同的图像,但它有轻微的变化。我正在寻找一种方法来放一张图片,比如一张森林的图片,它会给你其他的森林图片。
我是一个初学者,所以我希望寻找一些详细的东西,而不是给你做它的代码,只是一个指南,让我开始。
图像检索的一种常用方法实际上是受文本检索的启发,因此我将从快速回顾文本检索开始:
- 每个文档用它的词袋模型表示。
- 建立一个包含所有文档的倒排索引。
- 当用户发送查询
q
时,使用倒排索引返回数据库中最相似的文档。文档和查询q
之间的相似度通常使用表示查询和文档的两个向量的点积来计算。(tf-idf加权通常用于构建表示文档的向量。)
图像检索遵循了完全相同的方法。唯一的区别是第一步,他们定义了什么是"视觉词",以便对图像进行词袋表示。
他们首先提取图像的局部特征,如SIFT。这些局部特征(SIFT)是高维向量,因此采用k-means等聚类算法获得k
视觉词,k
聚类中心为"视觉词"。然后给定图像,提取局部特征(SIFT),并将每个特征分配给最接近的"视觉词"。或聚类中心,从而获得词袋表示。
该方法后来得到了改进,参见herv
如果你想了解更多关于这些方法,我强烈建议你看看视觉识别和机器学习的材料暑期学校,特别是"实例级识别"的幻灯片;以及"大规模视觉搜索"。