筛选描述符值:OpenCV与VLFeat

筛选描述符值:OpenCV与VLFeat,opencv,computer-vision,sift,vlfeat,Opencv,Computer Vision,Sift,Vlfeat,我试图比较和的SIFT实现 我注意到VLFeat的描述符值是整数,例如: 0 0 0 0 0 0 0 0 0 17 45 20 26 0 1… 而对于OpenCV: 0.03915550 0 0 0.0998274 0.235747 0 0 0 0.0276871 0.156622… 请注意,这些是两个不同图像的描述符 我有两个问题: 为什么他们有两种不同的价值观 如果我需要使用VLFeat(然后是VLAD编码)的k-means的OpenCV表示,我需要更改这些值吗 免责声明,我不是OpenCV

我试图比较和的SIFT实现

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

0 0 0 0 0 0 0 0 0 17 45 20 26 0 1…

而对于OpenCV:

0.03915550 0 0 0.0998274 0.235747 0 0 0 0.0276871 0.156622…

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

我有两个问题:

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

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

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

    出于性能原因,VLFeat可能使用整数描述符。使用整数的计算通常比使用浮点更快。然而,这可能以牺牲精度为代价。尽管如此,在计算机视觉的情况下,较小的精度可能并不那么重要。在对的描述中,您甚至可以读到“虽然这对某些应用程序是有限制的,但它对于聚类图像描述符非常有效,通常不需要非常高的精度”


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

    vl_sift
    vl_dsift
    是完全不同的算法w.r.t。生成关键点的过程不能基于描述符值(int或float)进行比较。根据VLFeat:“默认情况下,vl_dsift()计算等同于vl_sift()的特征。”。还有一个例子被描述为“这个例子使用VL_DSIFT()和VL_SIFT()生成等效的SIFT描述符:”我的错,我不知道默认行为是相同的(我删除了-1;)。然而,DSIFT意味着“密集筛选”,关键点是从标准网格生成的。也许你可以得到相同的行为,但这两种算法的目的是不同的。例如,DSIFT广泛用于分类,而SIFT更适合于对象识别。但这是OT。无论如何,根据我的说法,由于性能原因,VLFeat使用整数。但是,您应该能够使用vl_kmeans,它与浮点一起工作,并与OpenCV描述符一起使用。