【CV】Haar特征描述算子-人脸检测

理论部分

人脸检测方法

目前人脸检测的方法主要有两大类:基于知识和基于统计。

  • 基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来检测人脸。主要包括模板匹配、人脸特征、形状与边缘、纹理特性、颜色特征等方法。
  • 基于统计的方法:将人脸看作一个整体的模式——二维像素矩阵,从统计的观点通过大量人脸图像样本构造人脸模式空间,根据相似度量来判断人脸是否存在。主要包括主成分分析与特征脸、神经网络方法、支持向量机、隐马尔可夫模型、Adaboost算法等。

本文中介绍的Haar分类器方法,包含了Adaboost算法,稍候会对这一算法做详细介绍。所谓分类器,在这里就是指对人脸和非人脸进行分类的算法。

Haar-like特征

Haar特征值反映了图像的灰度变化情况。包含三种:边缘特征、线性特征、中心特征和对角线特征。每种分类器都从图片中提取出对应的特征。有点类似于卷积神经网络中的卷积核(如同prewitt、sobel算子,当然不完全一样),每个卷积核提取出对应的特征。
在这里插入图片描述
目前最常用的还是Haar-like特征,描述图像的特征,多用于人脸检测、行人检测,等目标检测。
这些特征组合成为特征模板,特征模板内有白色和黑色两种矩形,定义该模板的Haar特征值为白色矩形像素和减去黑色矩形像素和。
Haar特征值反映了图像的灰度变化情况。人脸检测中,脸部的一些特征能用矩形特征简单描述,比如眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色深,嘴巴比周围颜色深等。但矩形特征只对一些简单的图形结构,如边缘、线段,比较敏感。所以,只能描述特定走向(水平、垂直、对角)的结构。
在这里插入图片描述
上图中,A、B、D这类特征的特征值计算公式为: v = ∑ 白 − ∑ 黑 v=\sum白-\sum黑 v=,而对于C来说,其特征值的计算公式为: v = ∑ 白 − 2 ∑ 黑 v=\sum白-2\sum黑 v=2,这样是为了使黑白两种矩形区域的像素数目一致。当在人脸区域计算出的特征值与非人脸区域计算出的特征值差别很大时,该特征值就可以用来做人脸检测。
通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。特征模板成为“特征原型”,特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”,矩形特征的特征值称为“特征值”。
在这里插入图片描述
上图两个矩形特征表示人脸的某些特征。比如中间一幅图表示眼睛比脸颊的颜色深,右边一幅图表示鼻梁比鼻梁两侧的颜色深。使用特征比单纯地使用像素点具有很大地优越性,并且速度更快。
矩形特征可以位于图像的任意位置,大小也可以任意改变。因此矩形特征值是矩形模板类别、矩形位置、矩形大小这三个因素的函数。仅仅这三个因素,就使得检测窗口有非常多的矩形特征,比如在24*24像素大小的检测窗口就有16万个矩形特征数量。因此,有以下两个问题:

  • 如何快速计算这么多特征? ——通过积分图
  • 那些矩形特征才是对分类器分类最有效的? ——如通过AdaBoost算法来训练

积分图——矩形区域像素和的计算

通过积分图,只遍历一遍就可求出图像所有区域像素和的快速算法。
其主要思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。
积分图是一种能够描述全局信息的矩阵表示方法。积分图的构造方法是:位置处 ( i , j ) (i,j) (i,j)的值 i i ( i , j ) ii(i,j) ii(i,j)是原图像中 ( i , j ) (i,j) (i,j)左上角方向上所有像素 f ( k , l ) f(k,l) f(k,l)的和:
i i ( i , j ) = ∑ k ≤ i , l ≤ j f ( k , l ) ii(i,j)=\sum_{k\le i,l\le j}f(k,l) ii(i,j)=ki,ljf(k,l)积分图构建算法:

  • s ( i , j ) s(i,j) s(i,j)表示行方向的累加和,初始化 s ( i , − 1 ) = 0 s(i,-1)=0 s(i,1)=0
  • i i ( i , j ) ii(i,j) ii(i,j)表示一个积分图像,初始化 i i ( − 1 , i ) = 0 ii(-1,i)=0 ii(1,i)=0;
  • 逐行进行扫描,递归计算每个像素行方向的累加和 s ( i , j ) s(i,j) s(i,j)和积分图像 i i ( i , j ) ii(i,j) ii(i,j)的值:
    s ( i , j ) = s ( i , j − 1 ) + f ( i , j ) s(i,j)=s(i,j-1)+f(i,j) s(i,j)=s(i,j1)+f(i,j) i i ( i , j ) = i i ( i − 1 , j ) + s ( i , j ) ii(i,j)=ii(i-1,j)+s(i,j) ii(i,j)=ii(i1,j)+s(i,j)当图像扫描一遍之后,积分图像也就构建好了。
    任何矩阵区域像素累加和可通过矩形角点的积分图像值简单计算得到,因此可以在常数时间内完成。下图中,D区域的四个顶点分别为a、b、c、d,则D的像素和可表示为:
    D s u m = i i ( a ) − i i ( b ) − i i ( c ) + i i ( d ) D_{sum}=ii(a)-ii(b)-ii(c)+ii(d) Dsum=ii(a)ii(b)ii(c)+ii(d)在这里插入图片描述

Haar特征值的计算

距性特征模板的特征值可用像素和计算得到。以下图为例,对于矩形1346的特征值,可以由矩形A的像素和减去矩形B的像素和(矩形A和矩形B的像素和可由上节的公式计算得到):
[ i i ( 5 ) + i i ( 1 ) − i i ( 2 ) − i i ( 4 ) ] − [ i i ( 6 ) + i i ( 2 ) − i i ( 5 ) − i i ( 3 ) ] = [ i i ( 5 ) − i i ( 4 ) ] + [ i i ( 3 ) − i i ( 2 ) ] − [ i i ( 2 ) − i i ( 1 ) ] − [ i i ( 6 ) − i i ( 5 ) ] [ii(5)+ii(1)-ii(2)-ii(4)]-[ii(6)+ii(2)-ii(5)-ii(3)]=[ii(5)-ii(4)]+[ii(3)-ii(2)]-[ii(2)-ii(1)]-[ii(6)-ii(5)] <

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值