一个图像识别特征金字塔有多少步



我一直在查阅有关识别特征金字塔的文献(在我的案例中,是1280 x 960相机图像中的行人),大多数文本似乎都建议将每一步的大小减半。然而,我遇到了这个代码,它使用:

#define LAMBDA 10
#define SIDE_LENGTH 8
step = powf(2.0f, 1.0f / ((float)LAMBDA));
maxNumCells = W / SIDE_LENGTH;
if( maxNumCells > H / SIDE_LENGTH )
{
    maxNumCells = H / SIDE_LENGTH;
}
numStep = (int)(logf((float) maxNumCells / (5.0f)) / logf( step )) + 1;

这在我的图像金字塔上给出了46个步骤,一直到54 x 40的图像,每帧大约需要0.7秒!将LAMBDA值降低到2可以使我获得10个步长和接近实时的输出,并且检测效果同样好,如果不是更好的话,因为我丢失的中间帧更少。

那么,我通过降低金字塔来换取什么呢?是否有经验法则来估计所需的步骤?金字塔的顶部应该有多小?

EDIT:我正在使用的算法在基于判别训练的零件模型的对象检测中进行了描述。

(我对代码质量也不太有信心,因为/ logf( step )显然可以用* LAMBDA代替,但这完全是另一回事)

首先,我不是CV/DIP专家,所以要带着极端的偏见来处理这个问题。。。

BTW+1表示非常有趣的问题。我期待着在这里看到其他答案。看到你的问题,我首先想到的是为什么代码使用

  • logf(powf(2.0f,1.0f))

在代码中看到的这些东西让人想知道它的其余部分有多好,但它可能是以前的一些计算方法遗留下来的,后来改为当前状态。你发现/提到的/logf(step)也是如此。

无论如何,问题的答案是使用最适合您任务的步骤

如果不知道你做什么和如何做的背景,并且缺乏图像和直接实施的经验,很难做出更好的回答。

通常,过多的步骤可能会导致特征未匹配的犯规检测/分类,因为许多特征在较低的分辨率下会丢失。因此,基于统计的算法可能会被这。。。

另一方面,步骤过少可能会忽略一些缩放问题。此外,许多类似的功能可能会被遗漏,因为它们不会通过降低分辨率来消除。

  1. 您可以根据输入的一些知识来尝试自适应技术

    例如,如果你知道图像的平均复杂度,那么你就大致知道应该有多少个感兴趣的特征点。。。所以在你的金字塔中增加台阶,直到你达到预期的数字。。。

  2. 还有基于分辨率和最小可接受细节大小的静态技术

    步骤是图像面积的函数。。。

这两种方法都需要对测试数据样本的最佳常数进行一些研究和测试。然后基于真实输入数据形成特征点的金字塔层的最佳数量的方程/数或其它。

我认为选项#2是您提供的代码

因此,对于作者的任务,/0.5f可以只是缩放到不同的对数基数,或者只是具有最优结果的经验常数。它也可以是特征提取的半径或某种最小细节大小。。。很难从未注释的源代码中判断出它在这个(不是真正的建设性链接)上提醒了我。

最新更新