我有一个应用程序,给定合理数量的图像(比如说 20K)和一个查询图像,我想找到最相似的图像。一个合理的近似值是可行的。
为了保证表示每个图像的精度,我使用了 SIFT(并行版本,也可以实现快速计算)。
现在,给定可以表示为矩阵的n
SIFT 描述符集(500<n<1000
通常取决于图像大小),n x 128
从我在文献中看到的情况来看,我的情况有两种可能的方法:
- 描述符匹配:我们将每个描述符向量映射到低维空间,并尝试找到最相似的近似值,例如通过 LSH。然后,我们相对于找到的相似描述符增加查询图像和图像之间的匹配数。我们在所有描述符上迭代该过程。最后,我们返回具有最多描述符匹配的图像作为结果。
- Bag of Features:我们按照 BoF 模型为每个图像创建一个直方图向量。假设我们使用
k
-means(k=128
例如,其中 ),我们会k
为每个图像获得一个 -dimensions 向量。由于k
可能太大而无法进行有效比较,我们可以再次通过 LSH 将其映射到更小的(可能是二进制)空间(就像我们在 1. 中所做的那样)。最后,作为结果,我们返回最相似的直方图。请注意,这种方法的一个大问题是,正如我在这个问题中所讨论的,为了快速定义直方图,我们需要再次使用 LSH(真是一团糟!)。
我很惊讶我没有发现这两种方法的任何比较。我的问题是:我们必须为每个人考虑什么?有这两种方法的研究吗?第一种方法似乎更有效,并且对于这样的数据集是可行的。