我正在尝试通过并理解一些 VLFeat 代码,以了解它们如何生成 SIFT 特征点。一开始让我困惑的一件事是他们如何计算 SIFT 计算中的八度音阶数。
因此,根据文档,如果为初始八度音阶数提供负值,它将计算由 log2(min(width, height)) 给出的最大值。对应位的代码为:
if (noctaves < 0) {
noctaves = VL_MAX (floor (log2 (VL_MIN(width, height))) - o_min - 3, 1) ;
}
此代码在函数中是在 vl_sift_new 函数中。这里 o_min 应该是第一个八度的索引(我猜不需要从全分辨率图像开始)。我假设在大多数用例中可以将其设置为 0。
所以,我仍然不明白为什么他们从这个值中减去 3。这似乎非常令人困惑。我确信有一个很好的理由,但我一直无法弄清楚。