HOG特征提取原理and计算步骤,方向梯度直方图

HOG简介

        方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。        

原理

        其实本质就是梯度的统计信息,而梯度主要存在于边缘的地方。在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。

方法

        Hog特征提取主要依靠于三个参数: 检测窗口、块(block)、细胞单元。假定提取参数为      winSize(64,128), blockSize(16,16), blockStride(8,8), cellSize(8,8),nbins(9)
其中nBins表示在一个胞元(cell)中统计梯度的方向数目,例如nBins=9时,在一个胞元内统计9个方向的梯度直方图,每个方向为180/9=20度
HOG特征提取原理and计算步骤,方向梯度直方图

 

Hog特征提取中最小的统计单位,我们把它叫细胞单元(cell)。采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。

性能提升    

        把每个Block进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。

具体步骤

HOG提取流程图如下

HOG特征提取原理and计算步骤,方向梯度直方图

 

以一个检测窗口提取HOG为例
1. 灰度化
2.Gamma归一化

        采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
        其实就是对像素点做 幂率 处理
HOG特征提取原理and计算步骤,方向梯度直方图

 假设图像中有一个像素,值是 200 ,那么对这个像素进行校正必须执行如下步骤: 
  1. 归一化 :将像素值转换为  0 ~ 1  之间的实数。 算法如下 : ( i + 0. 5)/256  这里包含 1 个除法和 1 个加法操作。对于像素  A  而言  , 其对应的归一化值为  0. 783203 。 
        2. 预补偿 :根据公式  , 求出像素归一化后的 数据以  1 /gamma  为指数的对应值。这一步包含一个 求指数运算。若  gamma  值为  2. 2 ,  则  1 /gamma  为  0. 454545 , 对归一化后的  A  值进行预补偿的结果就 是  0. 783203 ^0. 454545 = 0. 894872 。 
        3. 反归一化 :将经过预补偿的实数值反变换为  0  ~  255  之间的整数值。具体算法为 : f*256 - 0. 5  此步骤包含一个乘法和一个减法运算。续前 例  , 将  A  的预补偿结果  0. 894872  代入上式  , 得到  A  预补偿后对应的像素值为  228 , 这个  228  就是最后送 入显示器的数据。

3.计算梯度

        计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值;求导操作不仅能够捕获轮廓,人影和一些纹理信息,还能进一步弱化光照的影响 。
        用[-1,0,1]梯度算子对原图像做卷积运算,得到x方向(水平方向,以向右为正方向)的梯度分量gradscalx,用[1,0,-1]T梯度算子对原图像做卷积运算,得到y方向(竖直方向,以向上为正方向)的梯度分量gradscaly。然后再用以上公式计算该像素点的梯度大小和方向

HOG特征提取原理and计算步骤,方向梯度直方图

HOG特征提取原理and计算步骤,方向梯度直方图4. 构建细胞单元(Cell)的梯度方向直方图

        例如上面所说的假定一个细胞单元是8*8像素,则整个单元内共有64个像素点的梯度信息,我们需要对这个Cell做梯度直方图统计。如前所述例如nBins=9时,在一个胞元内统计9个方向的梯度直方图。因为如上公式tan的函数周期为兀,所以直方图表述的范围在0-180度间,180/9=20度,如下图示
HOG特征提取原理and计算步骤,方向梯度直方图

 梯度大小就是作为投影的权值,比如某个像素的梯度方向是20-40度,然后它的梯度大小是100, 那么直方图第2个bin的计数就在原基础上+100.

5.Block梯度强度归一化
之前就提到了,多个cell组成一个block。
        由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩。
        把各个细胞单元组合成大的、空间上连通的区间(blocks)。这样,一个block内所有cell的特征向量串联起来便得到该block的HOG特征。这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中。我们将归一化之后的块描述符(向量)就称之为HOG描述符。
HOG特征提取原理and计算步骤,方向梯度直方图
 

6.收集HOG特征

        最后一步就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。

7.一个图像的HOG特征维数总共有多少呢?

        对于128*64的图像,cell为8*8,2*2个cell组成一个block,则block为16*16,每个像素9个梯度方向,则每个block内有 9*2*2=36,滑动步长为8像素,则水平方向有128/8 -1 =  15个扫描窗口,垂直方向有64/8 -1 = 7个扫描窗口,所以 总共有 36 * 15 * 7 = 3780个特征
        所以HOG特征维数 取决于一个block内有多少个cell和滑动步长

上一篇:[鸿蒙]鸿蒙开发之HML(三):block 标签


下一篇:说说浮动那些事儿