Viola-Jones面部检测方法如何工作?

Bla*_*dow 21 c++ opencv viola-jones

用几句话,请向我解释Viola-Jones人脸检测方法的工作原理.

cMi*_*nor 78

Viola-Jones探测器是一种强大的二元分类器,由几个弱探测器组成

Each weak detector is an extremely simple binary classifier
Run Code Online (Sandbox Code Playgroud)

在学习阶段,训练一系列弱检测器,以便使用Adaboost获得所需的命中率/未命中率(或精度/召回率).为了检测物体,原始图像被分成几个矩形块,每个块都被提交到级联

如果矩形图像块通过所有级联阶段,则将其分类为"正".该过程以不同的比例重复

在此输入图像描述

实际上,在低级别,对象检测器的基本组件只需要说明原始图像的某个子区域是否包含感兴趣对象的距离.这就是二元分类器的作用.

基本的弱分类器基于一个非常简单的视觉特征(这些特征通常被称为"类哈尔特征")
在此输入图像描述

类Haar特征由一类局部特征组成,这些特征是通过从特征的剩余区域的总和中减去特征的子区域的总和来计算的.

在此输入图像描述
这些特征的特征在于它们易于计算并且使用积分图像,非常有效地计算.

Lienhart推出了一套延伸的类Haar特征(见图)

在此输入图像描述
这些是标准的Haar式特征,已扭曲45度.Lienhart最初没有使用扭曲的棋盘格Haar-like(x2y2),因为它们所代表的对角线元素可以使用扭曲的特征简单地表示,但很明显,这个特征的扭曲版本也可以实现和使用.

这些扭曲的Haar类特征也可以使用扭曲45度的积分图像快速有效地计算.唯一的实现问题是扭曲的特征必须舍入为整数值,以便它们与像素边界对齐.此过程类似于为更大或更小的窗口缩放类Haar特征时使用的舍入,但是一个区别是对于45度扭曲特征,用于特征的高度和宽度的整数像素意味着像素的对角线坐标将始终位于相同的对角线像素组上

在此输入图像描述
这意味着与标准的垂直和水平对齐特征相比,可用的不同尺寸的45度扭曲特征的数量显着减少.

所以我们有类似的东西: 在此输入图像描述

关于公式,使用积分图像快速计算Haar类特征看起来像:

在此输入图像描述

最后,这里是一个C++实现 它使用ViolaJones.h伊万Kusalic

看到完整的c ++ 项目就在这里

  • @cMinor plz更新C++实现的链接 (3认同)