1. 引言
HOG(Histogram of Oriented Gradient),即方向梯度直方图。它通过计算和统计局部区域的梯度方向直方图来构成特征,一般与SVM分类器结合用于目标的图像识别。由于人体姿势和外表的多变,在图像中检测人体是一项具有挑战性的工作,要在不同的光照和背景下都能清晰的识别出人体,首先需要的是一个强壮的特征集。而研究表明,局部归一化的HOG特征描述子相比边缘方向直方图、形状上下文等,在对人体的特征描述方面有更佳的表现。因此,目前主流的人体识别采用的是HOG+SVM。
2. HOG特征
利用HOG特征的方法基本观点是:局部目标的外表和形状可以被局部梯度或边缘方向的分布很好的描述,即便我们不知道对应的梯度和边缘的位置。而这就引出一个问题,到底什么是梯度?在这篇文章中,对于梯度介绍的比较清楚。主要可以总结为:梯度是一个向量,即有方向有大小;它的方向是最大方向导数的方向,它的模为方向导数的最大值。通俗的讲,梯度指的是函数在变量空间的某一点处的最大变化率及其方向。
在HOG特征提取中,我们首先将图像分割成小的细胞单元(cells),将各个单元视为变量空间中的一点,在每个细胞单元中计算其梯度方向直方图。考虑到对光照和阴影的不变性,对所得到的直方图进行对比度归一化,即将几个细胞单元组合成一个更大的块(blocks),并归一化块内的所有细胞单元。归一化后的块描述符即为HOG描述子,而后将一幅图像中所有块的描述子组合起来就形成了最终的特征向量,即HOG特征。然后就可以通过SVM分类器进行人体检测。
3. HOG特征提取
使用某一特征进行目标识别,首先要对特征进行提取,而后才能进行匹配。HOG特征的提取主要分为以下几步:
1. 图像归一化图像归一化,或者说是标准化,即标准化gamma和颜色空间(Gamma/Colour Normalization)。其主要目的是减少光照因素的影响,同时可以抑制噪声的干扰。
Gamma压缩如下:
其中,gamma<1在高灰度区域内,动态范围变小,图像对比度降低,图像整体灰度值变大,显得亮一些;gamma>1,在低灰度值区域内,动态范围变小,图像对比度降低,图像整体灰度值变小,变得暗淡。
2. 计算像素点的梯度
对图像中的每一个像素点,计算其水平和垂直方向的梯度及梯度方向值,计算公式如下:
式中,分别表示像素点(x,y)处的水平方向梯度、垂直方向梯度、像素值。
像素点处的梯度幅值和方向为:
3. 分割细胞单元(cells)并构建直方图
在这一步,将图像分割成8*8个像素的细胞单元(cells),采用若干个bin的直方图来统计这8*8像素的梯度信息(加权投影)
4. 细胞单元组合块(blocks)及归一化梯度直方图
由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩。首先将多个临近的cells组合成块,并求其梯度直方图向量,需要注意的是,块与块之间的细胞单元是共享的;然后采用不同的方法进行归一化处理,即将直方图向量中bin值的最大值限制为0.2以下,然后再重新归一化一次,归一化的方法主要有L2-norm、L1-norm、L1-sqrt和L2-Hys四种;块的选取主要有两种 形状:矩形和环形,在此就不赘述了。用于行人检测的最佳参数设置是:3×3细胞/区间、6×6像素/细胞、9个直方图通道。则一块的特征数为:3*3*9;
5. 组合形成HOG特征向量
最后一步就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。
总结的流程图如下:
4. 总结
以上即为HOG特征提取的原理及流程,事实上,在Open Cv中包含已经训练好的分类模型,足以实现一些基本的识别要求。至于HOG与SVM的结合,这里有一个行人数据集,可用于SVM的训练,具体的SVM训练及识别方法以后有机会再更。