一个图像识别特征金字塔有多少步
How many steps in an image recognition feature pyramid?
我一直在查阅有关识别特征金字塔的文献(在我的案例中,是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)
也是如此。
无论如何,问题的答案是使用最适合您任务的步骤
如果不知道你做什么和如何做的背景,并且缺乏图像和直接实施的经验,很难做出更好的回答。
通常,过多的步骤可能会导致特征未匹配的犯规检测/分类,因为许多特征在较低的分辨率下会丢失。因此,基于统计的算法可能会被这。。。
另一方面,步骤过少可能会忽略一些缩放问题。此外,许多类似的功能可能会被遗漏,因为它们不会通过降低分辨率来消除。
-
您可以根据输入的一些知识来尝试自适应技术。
例如,如果你知道图像的平均复杂度,那么你就大致知道应该有多少个感兴趣的特征点。。。所以在你的金字塔中增加台阶,直到你达到预期的数字。。。
-
还有基于分辨率和最小可接受细节大小的静态技术。
步骤是图像面积的函数。。。
这两种方法都需要对测试数据样本的最佳常数进行一些研究和测试。然后基于真实输入数据形成特征点的金字塔层的最佳数量的方程/数或其它。
我认为选项#2是您提供的代码
因此,对于作者的任务,/0.5f
可以只是缩放到不同的对数基数,或者只是具有最优结果的经验常数。它也可以是特征提取的半径或某种最小细节大小。。。很难从未注释的源代码中判断出它在这个(不是真正的建设性链接)上提醒了我。
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 在内存不足之前,我可以声明多少个 const 变量?
- 可以读入进程内存的最大块大小是多少?
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 如何使程序谁将计算金字塔有多少个阶段
- 一个图像识别特征金字塔有多少步