【问题标题】:Viola-Jones detection algorithm using OpenCV haarcascade xml使用 OpenCV haarcascade xml 的 Viola-Jones 检测算法
【发布时间】:2023-04-11 06:16:01
【问题描述】:

我正在尝试实现 Viola Jones 检测器。因为我没有足够的图像或时间来训练分类器,所以我决定使用这些 OpenCV。

到目前为止,我已经能够将整个haarcascade_frontface_alt.xml 加载到内存中的结构中,为快速面积求和创建积分图像并为检测器创建基本算法。但它根本没有按预期工作。

所以,如果有人知道 Viola Jones 检测器的工作原理,并且知道 OpenCV 如何使用它的结构,请确认或否认我的假设:

1,积分图像以浮点值计算,范围为 0->1(白色)
2,对于每个特征,您在其矩形内取面积,乘以权重并与所有矩形求和
3、如果总和>阈值,则将left_val进一步求和,否则使用right_val
4,stage中所有分类器的总和大于stage_threshold,可能是face,所以继续下一个stage,如果不是,break
5、对所有阶段、检测窗口和尺度重复...

到目前为止,我得到了各种检测到的区域,除了那些包含人脸的区域......

如果我对 openCV 级联使用的假设是错误的,请帮忙。谢谢。

【问题讨论】:

标签: opencv face-detection viola-jones


【解决方案1】:
  1. 无论您使用 float 还是 int 作为积分图像的数据类型都无关紧要,只要它允许您存储足够大的值以防止算术溢出即可。这些值不必标准化。归一化稍后在评估分类器期间完成(参见 3)。

  2. 是

  3. 如果 sum * inverse_area

  4. 是

  5. 是

我建议您查看高级 OpenCV 端口,例如用 Java 编写的 JViolaJones 或用于基于树桩的级联的 js-objectdetect,尤其是用于非树桩级联的 computeSat() 和 detectSingleScale() 和 Haar.js两者都是用 JavaScript 编写的,以便更好地理解算法。优化的 OpenCV C/C++ 代码有点难以阅读。

【讨论】:

  • 您链接的两个库本身都是 JViolaJones 的端口,我发现它本身更具可读性(如果您了解 Java)。
  • 我在答案中添加了 JViolaJones。
猜你喜欢
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 2017-08-28
  • 2016-01-20
  • 2013-12-01
  • 2023-04-06
  • 2014-06-03
相关资源
最近更新 更多