Haar特征原理
Haar特征分为四类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模版。特征模版内有白色和黑色两种矩形,并定义该模版的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。脸部的一些特征能由矩形简单的描述,如眼睛要比脸颊颜色深,鼻梁两侧比鼻梁颜色深,嘴巴比周围颜色深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感所以只能描述特定走向(水平、垂直、对角)的结构。
对于图中的A,B和D这类特征,特征数值计算公式为:v = Sum白 - Sum黑,而对于C来说,计算公式如下: v = Sum白 - 2 * Sum黑。之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。
通过改变特征模版的大小和位置,可在图像子窗口中穷举出大量的特征。上图的特征模版称为“特征原型”。特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”,矩形特征的值称为“特征值”。
矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。所以类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征,如:在24 * 24像素大小的检测窗口内矩形特征数量可以达到16万个。这样就有两个问题需要解决了:
- 如何快速计算那么多的特征?–积分图。
- 哪些矩形特征才是对分类器分类最有效的?–如通过AdaBoost算法来训练。
二.Haar-like特征的计算–积分图
积分图就是只用遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。
积分图主要的思想:将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(这有个相应的称呼叫做动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。
积分图是一种能够描述全局信息的矩阵表示方法。积分图的构造方式是位置(i,j)处的值ii(i,j)是原图像(i,j)左上角方向所有像素的和:
积分图构建算法:
- 用s(i,j)表示行方向的累加和,初始化s(i,-1)=0。
- 用ii(i,j)表示一个积分图像,初始化ii(-1,i)=0。
- 逐行扫描图像,递归计算每个像素(i,j)行方向的累加和s(i,j)和积分图像ii(i,j)的值。s(i,j)=s(i,j-1) + f(i,j);ii(i,j)=ii(i-1,j)+s(i,j)。
- 扫描图像一遍,当达到图像右下角像素时,积分图像ii就构造好了。
积分图构造好之后,图像中任何矩阵区域的像素累加和都可以通过简单运算得到,如下图所示:
上图中D的像素和可以表示为:
Dsum = ii(A)+ii(B)+ii(C)。
而Haar-like特征值无非就是两个矩阵像素和的差,同样可以在常数时间内完成。所以矩形特征的特征值计算,只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。
三.Haar-like矩形特征拓展
Lienhart R等对Haar-like矩形特征库做了进一步扩展,加入了45度角的矩阵特征。扩展后的特征大致分为4种类型:边缘特征、线性特征、圆心环绕特征和对角线特征,如下图所示:
在特征值的计算过程中,黑色区域的权值为负值,白色区域的权值为正值。而且权值与矩形面积成反比(使两种矩形区域中像素数目一致)。
45度旋角的矩形特征计算:
对于45度旋角的矩形,我们定义RSAT(x,y)为点(x,y)左上角45度和左下角45度区域的像素和。
公式可以表示为:
为了节约时间,减少重复计算,可按如下递推公式计算:
而计算矩阵特征的特征值,是位于十字行矩形RSAT(x,y)之差。可以参考下图: