原文站点:https://senitco.github.io/2017/06/15/image-feature-haar/
Haar特征是一种用于目标检测或识别的图像特征描述子,Haar特征通常和AdaBoost分类器组合使用,而且由于Haar特征提取的实时性以及AdaBoost分类的准确率,使其成为人脸检测以及识别领域较为经典的算法。
多种Haar-like特征
在Haar-like特征提出之前,传统的人脸检测算法一般是基于图像像素值进行的,计算量较大且实时性较差。Papageorgiou等人最早将Harr小波用于人脸特征表示,Viola和Jones则在此基础上,提出了多种形式的Haar特征。Lienhart等人对Haar矩形特征做了进一步的扩展,加入了旋转 45∘ 的矩形特征,因此现有的Haar特征模板主要如下图所示:
在计算Haar特征值时,用白色区域像素值的和减去黑色区域像素值的和,也就是说白色区域的权值为正值,黑色区域的权值为负值,而且权值与矩形区域的面积成反比,抵消两种矩形区域面积不等造成的影响,保证Haar特征值在灰度分布均匀的区域特征值趋近于0。Haar特征在一定程度上反应了图像灰度的局部变化,在人脸检测中,脸部的一些特征可由矩形特征简单刻画,例如,眼睛比周围区域的颜色要深,鼻梁比两侧颜色要浅等。
Haar-like矩形特征分为多类,特征模板可用于图像中的任一位置,而且大小也可任意变化,因此Haar特征的取值受到特征模板的类别、位置以及大小这三种因素的影响,使得在一固定大小的图像窗口内,可以提取出大量的Haar特征。例如,在一个 24×24 的检测窗口内,矩形特征的数量可以达到16万个。这样就需要解决两个重要问题,快速计算Haar矩形特征值——积分图;筛选有效的矩形特征用于分类识别——AdaBoost分类器。
快速计算——积分图
积分图构建
在一个图像窗口中,可以提取出大量的Haar矩形特征区域,如果在计算Haar特征值时,每次都遍历矩形特征区域,将会造成大量重复计算,严重浪费时间。而积分图正是一种快速计算矩形特征的方法,其主要思想是将图像起始像素点到每一个像素点之间所形成的矩形区域的像素值的和,作为一个元素保存下来,也就是将原始图像转换为积分图(或者求和图),这样在求某一矩形区域的像素和时,只需索引矩形区域4个角点在积分图中的取值,进行普通的加减运算,即可求得Haar特征值,整个过程只需遍历一次图像,计算特征的时间复杂度为常数(O(1))。因此可以大大提升计算效率。
积分图中元素的公式定义如下:
上式含义是在 (x,y) (第 x 行第
s(x,y) 为行元素累加值,初始值 s(x,−1)=0,ii(−1,y)=0
矩形特征计算
构建好积分图后,图像中任何矩形区域的像素值累加和都可以通过简单的加减运算快速得到,如下图所示,矩形区域D的像素和值计算公式如下:
在下图中,以水平向右为x轴正方向,垂直向下为y轴正方向,可定义积分图公式Summed Area Table( SAT(x,y) )