SIFT 描述符值:OpenCV 与 VLFeat
SIFT descriptors values: OpenCV vs VLFeat
我正在尝试比较 OpenCV and VLFeat 的 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 个不同图像的描述符。
我有两个问题:
- 为什么他们有两个不同的值?
- 如果我需要使用 VLFeat(然后是 VLAD 编码)的 k-means 的 OpenCV 表示,我需要更改这些值吗?
免责声明,我不是 OpenCV 或 VLFeat 方面的专家,但我认为我知道答案。
VLFeat 可以生成整数和浮点描述符。要生成整数描述符,请使用带有 FloatDescriptors 参数的 vl_sift function and in order to generate float descriptors use vl_dsift 函数。
VLFeat 可能出于性能原因使用整数描述符。使用整数的计算通常比使用浮点数更快。但是,这可能会以精度为代价。尽管如此,在计算机视觉的情况下,较小的精度可能并不是那么重要。在 integer k-means algorithm 的描述中,您甚至可以阅读 "While this is limiting for some application, it works well for clustering image descriptors, where very high precision is usually unnecessary"。
关于k-means算法。浮动描述符有一个版本 (vl_ikmeans) for integers descriptors and the version (vl_kmeans)]。对于 OpenCV,只需使用后者。
我正在尝试比较 OpenCV and VLFeat 的 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 个不同图像的描述符。
我有两个问题:
- 为什么他们有两个不同的值?
- 如果我需要使用 VLFeat(然后是 VLAD 编码)的 k-means 的 OpenCV 表示,我需要更改这些值吗?
免责声明,我不是 OpenCV 或 VLFeat 方面的专家,但我认为我知道答案。
VLFeat 可以生成整数和浮点描述符。要生成整数描述符,请使用带有 FloatDescriptors 参数的 vl_sift function and in order to generate float descriptors use vl_dsift 函数。
VLFeat 可能出于性能原因使用整数描述符。使用整数的计算通常比使用浮点数更快。但是,这可能会以精度为代价。尽管如此,在计算机视觉的情况下,较小的精度可能并不是那么重要。在 integer k-means algorithm 的描述中,您甚至可以阅读 "While this is limiting for some application, it works well for clustering image descriptors, where very high precision is usually unnecessary"。
关于k-means算法。浮动描述符有一个版本 (vl_ikmeans) for integers descriptors and the version (vl_kmeans)]。对于 OpenCV,只需使用后者。