Haar Cascade 算法

17 Mar 2025 | 4 分钟阅读

Paul Viola 和 Michael Jones 提出了 Haar 级联算法,该算法在物体检测方面非常有效。该算法基于机器学习方法,使用大量的正面或负面图像来训练分类器。

Haar Cascade Algorithm
  • 正面图像 (Positive Images):正面图像是我们希望分类器识别的图像类型。
  • 负面图像 (Negative Images):负面图像是包含其他内容(即不包含我们要检测的物体)的图像类型。

第一个实时人脸检测器也使用了 Haar 分类器,我们在这里将介绍它。 Haar 分类器或 Haar 级联分类器是一种机器学习程序,用于在图片和视频中查找物体。

Haar 级联算法详解

它包含四个阶段,包括:

  1. Haar 特征计算
  2. 积分图像创建
  3. Adaboost 的使用
  4. 级联分类器的实现

1. Haar 特征计算:收集 Haar 特征是第一阶段。Haar 特征是指在检测窗口中特定位置的相邻区域上进行的一种计算。该计算主要包括对每个区域的像素强度求和,以及对这些和值之间的差值进行计算。

Haar Cascade Algorithm

对于大型图像来说,这会很耗时,因为在这种情况下需要使用积分图像来减少计算量。

2. 积分图像创建:创建积分图像可以减少计算量。它不是在每个像素上进行计算,而是创建子矩形,数组引用这些子矩形来计算 Haar 特征。

Haar Cascade Algorithm

在物体检测的情况下,只有与物体相关的特征才是重要的,而绝大多数其他的 Haar 特征都是无关紧要的。但是,我们如何在成千上万的 Haar 特征中选择那些最能代表物体的特征呢?这时 Adaboost 就派上用场了。

3. Adaboost 训练

Haar Cascade Algorithm

Adaboost 训练通过组合“弱分类器”来产生一个“强分类器”,物体检测方法可以使用这个强分类器。这本质上包括选择有用的特征并教会分类器如何使用它们。

通过将一个窗口在输入图像上滑动并计算图像每个部分的 Haar 特征来创建弱学习器。这与一个用于区分物体和非物体的阈值不同。这些是“弱分类器”,但一个准确的强分类器需要许多 Haar 特征。

在最后一步,弱学习器可以与强学习器结合。

4. 级联分类器的实现

Haar Cascade Algorithm

此时的每个阶段实际上都是一组不熟练的“学生”。Boosting 训练弱学习器,通过所有弱学习器的平均预测来产生一个高度准确的分类器。

这取决于预测结果。分类器决定是否检测到物体(正面)或将其移至下一个区域(负面)。由于大多数窗口不包含感兴趣的物体,因此会创建多个阶段以尽快拒绝负样本。

由于将物体分类为非物体会严重损害您的物体检测系统,因此具有低误报率(False Negative Rate)至关重要。

实施


Haar Cascade Algorithm

代码:眼睛检测


Haar Cascade Algorithm

代码:人脸和眼睛检测


Haar Cascade Algorithm

这种 Haar 级联算法可以检测所有类型的物体,只要存在一个类似的 XML 文件。我们可以创建自己的文件来检测我们想要的物体类型。

应用

Haar Cascade Algorithm

Haar 级联算法在许多领域都有应用。一些应用包括:

  1. 人脸识别:就像 iPhone 用户使用面部识别一样,其他电子设备也使用 Haar 级联算法进行安全登录,以了解用户的身份验证。
  2. 机器人学:这些机器人机器可以通过物体检测来感知周围环境并执行任务。
  3. 自动驾驶汽车:自动驾驶汽车需要了解周围环境,而该级联算法能够识别行人、交通信号灯等物体,以确保安全。
  4. 图像搜索和物体识别:借助 Haar 级联算法,可以扩展人脸识别功能并搜索不同类型的物体。
  5. 工业用途:Haar 级联算法允许机器抓取和识别物体。