我正在尝试比较opencv和vlfeat的筛选实现。
我注意到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个不同图像的描述符。
我有两个问题:
- 为什么他们有两个不同的值?
- 如果我需要使用vlfeat(然后是vlad编码)的k-means openCV表示,我需要更改这些值吗?
免责声明,我不是OpenCV或VLFEAT的专家,但我认为我知道答案。
vlfeat可以同时生成整数和浮点描述符。要生成整数描述符,请使用VL_SIFT函数,并为了生成float描述符,使用vl_dsift函数与 floatDescriptors parameter。
出于性能原因,vlfeat可能使用整数描述符。使用整数的计算通常比使用浮子要快。但是,这可能是以精度为代价的。但是,在计算机视觉的情况下,较小的精度可能并不那么重要。在整数K-均值算法的描述中,您甚至可以阅读"这是限制某些应用程序的限制,它对聚类图像描述符非常有效,而在这些应用程序中,通常不必要的精度非常高"。
>关于K-均值算法。有一个用于整数描述符的版本(vl_ikmeans)和float描述符的版本(vl_kmeans)]。使用OpenCV,只需使用后者。