目标检测的图像特征提取之HOG特征

目标检测的图像特征提取之HOG特征

梯度方向直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行目标检测的特征描述子。它通过计算和统计图像局部区域的梯度方向信息(梯度方向直方图)来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。HOG+SVM进行行人检测的方法最初是由法国国家计算机技术和控制研究所 (INRIA)的研究员Navneet Dalal 和Bill Triggs首先在2005年的CVPR中提出的,用于静态图像或者视频的行人检测。尽管之后有很多行人检测算法不断提出,但基本都是沿用着HOG+SVM的思路为主。

1、HOG的主要思想

在一张图像中,局部目标的外观和形状(appearance and shape)能够被边缘方向的分布(光强梯度的方向和梯度的大小)很好地描述。(梯度主要存在于边缘的地方)。具体的实现方法是:首先将图像分割成小的连通区域,称作单元(Cell)。然后计算单元中各像素点的梯度大小和方向,形成梯度方向直方图。最后把这些直方图组合起来就可以构成特征描述算子。

为进一步提高HOG的性能,把这些局部直方图在图像的更大的范围内(称作区间,block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间Block中的各个单元做归一化。通过这个归一化后,能对光照变化和阴影更加鲁棒。因此,HOG得到的描述子保持了几何和光学不变性,尤其适合对行人进行检测。

2、HOG特征提取算法的实现过程


HOG特征提取方法就是将一个要检测的目标或者扫描窗口:

1图像归一化

1)由于颜色信息作用不大,通常转化为灰度图;

2)对输入图像进行Gamma校正;目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响;

Gamma压缩公式:

 ,通常取Gamma=1/2;

经过Gamma校正后的输入和输出图像灰度值关系如下图所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到了提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。

 

2、计算图像梯度

计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息。图像中像素点(x,y)的梯度为:


通常做法是首先用[-1,0,1]梯度算子对原图像做卷积运算,得到x方向(水平方向,以向右为正方向)的梯度分量,然后用[1,0,-1]T梯度算子对原图像做卷积运算,得到y方向(竖直方向,以向上为正方向)的梯度分量。然后再用以上公式计算该像素点的梯度大小和方向。

作者也尝试了其他一些更复杂的模板,如3×3 Sobel模板,或对角线模板,但是在这个行人检测的实验中,这些复杂模板的表现都较差,所以作者的结论是:模板越简单,效果反而越好。

3、为单元构建梯度方向直方图

由于单元格是HOG特征最小的结构单位,而且区间block和检测窗口Win的滑动步长就是一个Cell的宽度或高度,所以,先把整个图像分割为一个个的Cell单元格,Cell单元格可以是矩形的(rectangular),也可以是星形的(radial))。


如上图所示,接下来将空间划分为18份(bin),每20度一份,对于HOG我们只计区间0度到180度,而剩下的180度,我们划分到L-180对应的份中。然后对单元内每个像素基于梯度方向在直方图中进行加权投影(映射到固定的角度范围),权值即该像素点处的梯度幅值(也可以是幅值的相关函数,实验结果表明利用梯度幅值作为权值时效果较好),就可以得到这个单元的梯度方向直方图,即该单元对应的9维特征向量(因为有9个bin)。

例子:假设某个像素的梯度方向是20-40度,且它的梯度大小是2,那么直方图第2个bin的计数加2。

4、把单元格组合成大的区间(block),区间内归一化梯度直方图

把各个单元组合成大的、空间上连通的区间(blocks)。这样,一个区间内所有单元的特征向量串联起来便得到该区间的HOG特征。这些区间是互有重叠的,这就意味着每一个单元的特征会以不同的结果多次出现在最后的特征向量中。

由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步减弱光照、阴影的影响。


区间描述算子可以用2个参数来表征:每个区间中单元的数目和每个单元的直方图通道数目。例如:行人检测的参数设置是:3×3单元/区间、9个直方图通道。则一个区间的特征维数为:3*3*9;

 

5、将所有区间的HOG特征描述子串联起来就可以得到该图像的HOG特征描述子了。这个就是最终可供分类使用的特征向量。

 

小结:

可以看到,HOG是将一个特征窗口划分为很多的区间block,在每一个区间里又划分为很多的单元cell,HOG特征向量既是把这些所有的cell对应的小特征串起来得到一个高维的特征向量,这个窗口对应的一维特征向量维数n就等于窗口中的区间数 x 区间中的单元数x 每一个单元对应的特征向量数。

比如窗口大小64x128,区间的大小16x16,单元大小为8x8,也就是一个区间中的cell数目是 (16/8)*(16/8) =4。滑动步长是一个Cell的宽度或高度,为8x8,那么窗口中区间的数目是((64-16)/8+1)*((128-16)/8+1) = 7*15 =105,又由于我们把每一个单元投影到9个bin中,所以每一个单元对应的向量就是9维,因为n = 窗口中的区间数 x 区间中的单元数  x 每一个单元对应的特征向量数,故n= 105x4x9 = 3780,这就是这个窗口对应的特征向量维数。

 

HOG的优点:首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征适合用于图像中的行人检测。

缺点:

描述算子生成过程冗长,导致速度慢,实时性差;

很难处理遮挡问题。

由于梯度的性质,该描述算子对噪声比较敏感。


参考博客:http://blog.csdn.net/zouxy09 (注:原文中最后一段写错了,是8*8的cell以及16*16的block)

你可能感兴趣的:(目标检测的图像特征提取之HOG特征)