【问题标题】:How many steps in an image recognition feature pyramid?图像识别特征金字塔有多少步?
【发布时间】:2016-02-11 03:18:25
【问题描述】:

我一直在寻找关于特征金字塔进行识别的文献(在我的例子中,行人来自 1280 x 960 的相机图像),大多数文本似乎都建议将每一步的大小减半。但是,我came across this code 使用:

#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 步和近乎实时的输出,并且与我丢失更少的中间帧一样好,如果不是更好的话。

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

编辑:我正在使用的算法在Object Detection with Discriminatively Trained Part Based Models 中进行了描述。

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

【问题讨论】:

    标签: c++ image-processing computer-vision feature-detection


    【解决方案1】:

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

    顺便说一句 +1 非常有趣的问题。我期待在这里看到其他答案。看到你的问题时,我首先想到的是(蓝色的平衡)为什么代码使用:

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

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

    无论如何,您的问题的答案是尽可能多地使用最适合您的任务的步骤。

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

    一般而言,步数过多可能会因特征不匹配而导致检测/分类错误,因为在较低分辨率下会丢失许多特征。因此,基于统计的算法可能会因此而犯规......

    另一方面,步骤太少可能会忽略一些缩放问题。此外,许多类似的特征也可能会被错过匹配,因为它们不会通过降低分辨率而被消除。

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

      例如,如果您知道图像的平均复杂度,那么您大概知道应该有多少个感兴趣的特征点......所以向您的金字塔添加步骤,直到达到预期的数量......

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

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

    这两种方法都需要对测试数据样本进行一些研究和测试,以获得最佳常数。然后根据实际输入数据形成特征点金字塔层的最佳数量的方程/数字。

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

    因此,/0.5f 可能只是缩放到不同的对数基数,或者只是经验常数,对于作者的任务具有最佳结果。它也可能是特征提取的半径或某种最小细节尺寸......很难从未注释的源代码中看出它在this (not really constructive link)上提醒我。

    【讨论】:

    • 顺便说一句,除以五意味着5 * SIDE_LENGTH是金字塔顶部图像的最小尺寸,似乎太小了。
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 2017-12-19
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2019-08-27
    • 2013-12-17
    相关资源
    最近更新 更多