22

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

4

2 回答 2

77

Viola-Jones 检测器是一个强大的二元分类器,由几个弱检测器构建而成

Each weak detector is an extremely simple binary classifier

在学习阶段,训练级联的弱检测器,以便使用 Adaboost 获得所需的命中率/未命中率(或精度/召回率)来检测对象,将原始图像划分为几个矩形块,每个块提交到级联

如果一个矩形图像块通过所有级联阶段,那么它被归类为“正”这个过程在不同的尺度上重复

在此处输入图像描述

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

基本的弱分类器基于一个非常简单的视觉特征(这类特征通常被称为“Haar-like features”)
在此处输入图像描述

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

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

Lienhart 引入了一组扩展的扭曲 Haar 特征(见图)

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

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

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

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

关于公式,使用积分图像的 Haar 类特征的快速计算如下所示:

在此处输入图像描述

最后,这是一个 使用Ivan Kusalic 的 ViolaJones.hc++ 实现

要查看完整的 c++ 项目,请转到此处

于 2011-04-27T18:13:21.567 回答
4

Viola-Jones 检测器是由几个弱检测器构建的强二元分类器。每个弱检测器都是一个极其简单的二元分类器

检测由以下部分组成:

Haar Filter:从图像中提取特征以进行分类(特征用于编码临时领域知识)

Integral Image:允许非常快速的特征评估

Cascade Classifier:级联分类器由多级过滤器组成,将图像(图像的滑动窗口)分类为人脸。

下面概述了如何检测图像中的人脸。

在此处输入图像描述

检测窗口围绕整个图像提取特征移动(通过haar filter计算Integral Image然后将提取的特征发送Cascade Classifier到分类,如果它是人脸)。滑动窗口逐像素移动。每次窗口移动时,窗口内的图像区域都会经过级联分类器。

Haar Filter:你可以理解过滤器可以提取特征,比如eyesbridge of the nose等等。

在此处输入图像描述

Integral Image:允许非常快速的特征评估

在此处输入图像描述

Cascade Classifier

一个级联分类器由多级过滤器组成,如下图所示。每次滑动窗口移动时,滑动窗口内的新区域将逐级通过级联分类器。如果输入区域未能通过某个阶段的阈值,级联分类器将立即将该区域拒绝为人脸。如果一个区域成功通过了所有阶段,则将其分类为人脸候选者,可以通过进一步处理对其进行细化。

在此处输入图像描述

更多细节:

首先,我建议您阅读源文件Rapid Object Detection using a Boosted Cascade of Simple Features,以对该方法有一个大致的了解。

如果看不懂,可以参考Viola-Jones 人脸检测实现 Viola-Jones 人脸检测算法Viola-Jones 实时人脸检测器研究了解更多详情。

这是Paul Viola 和 Michael J. Jones 的人脸检测算法的Python 代码Python 实现。

matlab代码在这里

于 2018-06-15T11:11:42.130 回答