2

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

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

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

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

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

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

4

1 回答 1

1
  1. 是否使用 float 或 int 作为整数图像的数据类型并不重要,只要它允许您存储足够大的值以防止算术溢出。这些值不必标准化。归一化稍后在评估分类器期间完成(参见 3)。

  2. 是的

  3. 如果 sum * inverse_area < threshold * standard_deviation,left_val 被进一步求和,...(见下文)。

  4. 是的

  5. 是的

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

于 2012-09-05T04:29:14.763 回答