Viola-Jones 算法复杂度

Posted

技术标签:

【中文标题】Viola-Jones 算法复杂度【英文标题】:Viola-Jones algorithm complexity 【发布时间】:2017-06-13 01:40:35 【问题描述】:

像 O(log(N)) 这样的形式的 是多少? 尽管这是一个非常简单的算法,但没有关于它的具体信息。

【问题讨论】:

我不知道如何计算它的复杂度,我很想知道答案。我知道该算法分为三个主要部分。 1 - 计算图像梯度,2 - 特征提取,3 - 分类(人脸或无人脸)。但是这 3 个步骤中的每一个都发生在图像内部的一个小 ROI 中,它总是滑动到下一个区域并重复这个过程。然后重新缩放图像并重新开始 ROI,直到 ROI 与图像本身大小相同。 我猜它是 O(N),因为 Viola-Jones 显然具有线性复杂性,但我不确定这是否是正确的编写方式 “没有关于它的具体信息” 该算法在最初提出的论文中有详细描述。说没有关于它的信息是相当奇怪的。 【参考方案1】:

当我们谈到 Viola-Jones 算法的复杂性时,我们需要记住该算法的步骤。 根据 Paul Viola 和 Michael Jones 的原始文章,该算法包含 4 个主要步骤:

    Haar 特征选择 创建完整图像 Adaboost 训练 级联分类器

第一步的复杂度是 O(1),因为选择哪个 Haar Feature 的决定与输入无关。

第二步的复杂度是 O(N),因为在这一步中我们遍历图像矩阵。如您所知,积分图像可帮助我们以 O(1) 复杂度对特定特征内的所有像素执行计算。然而,积分图像的创建成本 O(N),因为我们遍历原始矩阵中的每个像素并在新矩阵中写入新值。新矩阵中每个点的值是左上角所有像素的总和,包括旧矩阵中的目标像素

第三步的复杂度是O(N D^2),其中D是特征的个数lookherewhy。

第四步的复杂度小于O(N) 看看here为什么。

综上所述,我们可以从每个阶段计算 Viola-Jones 算法的复杂度为 O(n)

【讨论】:

【参考方案2】:

输入图像的像素数 (N) 是线性的 (O(N))。所有 Haar 图像特征都是在积分图像上以恒定时间计算的,计算后者需要对输入图像进行一次遍历。

【讨论】:

以上是关于Viola-Jones 算法复杂度的主要内容,如果未能解决你的问题,请参考以下文章

Viola-Jones(人脸检测)

matlab中的人脸检测(viola-jones)

算法分类 ,时间复杂度 ,空间复杂度,优化算法

算法的时间复杂度取决于啥,算法分析的时间复杂度取决于

算法之算法的时间复杂度

算法的时间复杂度和空间复杂度合称为算法的复杂度