特征提取— —Hog算法

HOG(Histogram of Oriented Gridients),方向梯度直方图,通过计算和统计图像局部区域的梯度方向直方图来构成图像的局部特征,在deep learning出现之前被广泛用于行人检测:Hog提取特征+SVM分类器,这一方法由Dalal等在2005年的CVPR上提出。

整体方法:通过计算各个像素点的梯度大小和梯度方向,获取图像中各个局部的边缘方向的分布信息,并进行局部性的统计,最后将所有统计的局部信息合并在一起作为原图像最终的特征。(之所以要分成多个有重叠的局部进行统计,是为了最后能够得到更高维的特征向量)

即:图像颜色归一化–计算梯度–统计得到梯度直方图–在block内归一化直方图–得到Hog特征

基本思想:实质上Hog特征算子表征了图像的局部梯度方向和梯度大小的分布特性。从而达到一个“当图像中边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示目标的外形轮廓”的效果。

算法具体流程如下:

1.颜色空间归一化

由于Hog主要关注边缘轮廓信息,与颜色信息无关,因此先将彩色图像转化为灰度图像,采用常见的心理学公式:

gray=0.3R+0.59G+0.11B

然后,为了减弱光照不均带来的影响,采用gamma校正方法做空间变换,使较暗的区域适当变亮,使较亮的区域适当变暗(使用对数或负指数函数均可):
I(x,y)=I(x,y)gamma

其中指数gamma通常取1/2

2.计算梯度

计算图像中各个像素点水平和竖直方向的梯度值,求出各点总的梯度值和梯度方向:
特征提取— —Hog算法
实现方法是分别用梯度算子[1,0,1][1,0,1]T对图像做卷积,得到水平(向右)和竖直方向(向上)的梯度大小。

3.以cell为单位建立梯度方向直方图

首先将原始图像分割成若干个特定尺寸(如8*8)的区域(cell),各个cell无重叠,然后在每一个cell内来统计建立梯度方向直方图:将梯度方向(角度)划分成9个bin构建9维的特征向量(9为较好的经验取值),作为直方图的横轴,每个角度范围内(40度)对应的像素点梯度大小累加作为纵轴,如下如所示:
特征提取— —Hog算法

4.合并多个cell构成大的block,归一化block内的直方图

考虑到原图像中光照情况和背景变化多样,梯度值的变化范围可能很大,因此有必要将特征标准化。这里采取的标准化方法是:将多个cell放在一个连通的区间block中,然后标准化每个block。一个block内所有cell的特征向量串联起来作为该block的Hog特征,注意各个blocks之间是允许重叠的。(如果原图像分割cell不是整数个,则先进行适当的图像放缩)

通常block用三个参数来表征:每个block中cell的个数、每个cell中像素点的个数、每个cell中直方图的通道数。

传统的行人检测中最佳参数设置是:3×3 cell/block、6×6 pixel/cell、9个直方图通道,即block的参数为:3×3×9

针对block举例:设定6×6的cell,将相邻的2×2个cell组成一个block,则一个block的特征向量是9×(2×2)=36维,block尺寸为12×12。原图像可以以步长1划分成多个block区域,并对每个block统计其特征,然后利用SVM等分类器进行分类,来寻找图像中的目标。(当然,也可以用原图像中所有block的特征串联构成一个更高维的向量作为图像的整体特征,但一般较少使用)

在目标检测(行人检测)任务中,通常是在由原图像划分的多个block中,计算出每个block的特征向量,即Hog特征(属于原图像的局部特征),然后拿到SVM分类器中分类,判断该block区域是否是目标物体(行人)