SIFT描述符值:OpenCV与VLFeat

时间:2016-12-08 11:53:26

标签: opencv computer-vision sift vlfeat

我正在尝试比较OpenCVVLFeat的SIFT实施。

我注意到VLFeat的描述符值是整数,例如:

0 0 0 0 0 0 0 0 0 0 0 17 45 20 26 0 1 ...

对于OpenCV:

0.0391555 0 0 0.0998274 0.235747 0 0 0.0276871 0.156622 ...

请注意,这些是2个不同图像的描述符。

我有两个问题:

  1. 为什么他们有两个不同的价值观?
  2. 如果我需要使用VLFeat(然后是VLAD编码)的k-means的OpenCV表示,我是否需要更改这些值?

1 个答案:

答案 0 :(得分:1)

免责声明,我不是OpenCV或VLFeat的专家,但我认为我知道答案。

VLFeat可以生成整数和浮点描述符。要生成整数描述符,请使用vl_sift函数,并为了生成浮点描述符,请使用带有 FloatDescriptors 参数的vl_dsift函数。

由于性能原因,VLFeat可能使用整数描述符。使用整数计算通常比使用浮点数更快。但是,它可能以牺牲精度为代价。尽管如此,在计算机视觉的情况下,较小的精度可能不是那么重要。在integer k-means algorithm的描述中,您甚至可以阅读"虽然这是某些应用的限制,但它适用于聚类图像描述符,其中通常不需要非常高的精度"。

至于k-means算法。整数描述符有一个版本(vl_ikmeans),浮点描述符有一个版本(vl_kmeans)]。使用OpenCV只需使用后者。