hog

 

通过计算和统计图像局部区域的梯度直方图来构成特征,先计算图片某一区域中不同方向上梯度的值,然后进行累积,得到直方图,这个直方图呢,就可以代表这块区域了,也就是作为特征,可以输入到分类器里面了。 

 

 

 

方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。

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

大概过程:

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

1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

4)将图像划分成小cells(例如8*8像素/cell);

5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;

6)将每几个cell组成一个block,一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。

7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。

具体过程:

(2)gamma矫正

为了减少光照因素的影响,首先需要将整个图像进行规范化(归一化)。在图像的纹理强度中,局部的表层曝光贡献的比重较大,所以,这种压缩处理能够有效地降低图像局部的阴影和光照变化。因为颜色信息作用不大,通常先转化为灰度图;

     Gamma压缩公式:

 

     比如可以取Gamma=1/2;

(3)计算梯度

计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值和幅值。

图像中像素点(x,y)的梯度为:

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

生成的梯度方式是[-π/2,π/2],转换到[0,π],然后均分成9个区域,这样就生成了一个1*9的vector。对于8*8中某一个点,根据他的梯度方向判断需要将这个位置归属于vector哪个位置。放入vector的值就是幅度值。vector中每个位置的值是8*8网格中所有值累加和,也就是把所有属于0到20°的幅值累加起来。

 

最后会生成一个根据梯度方向、幅度值生成的1*9的总的直方图。

(5)16*16块归一化

在16*16块中使用l2归一化进行:

v = [128, 64, 32]
[(128^2) + (64^2) + (32^2) ]^0.5=146.64
把v中每一个元素除以146.64得到[0.87,0.43,0.22]
考虑另一个向量2*v,归一化后可以得到向量依旧是[0.87, 0.43, 0.22]。你可以明白归一化是把scale给移除了。

在4个8*8的块中做归一化,然后就像卷积一样不停滑动生成最终的直方图,4个9*1的直方图组合成一个36*1的向量。

 

(6)

计算HOG特征向量

为了计算这整个patch的特征向量,需要把36*1的向量全部合并组成一个巨大的向量。向量的大小可以这么计算:

    1. 我们有多少个16*16的块?水平7个,垂直15个,总共有7*15=105次移动。
    2. 每个16*16的块代表了36*1的向量。所以把他们放在一起也就是36*105=3780维向量。

 

 

总结:先变成灰度图,然后对像素值进行gamma矫正,然后计算每个位置x、y两个方向的梯度,根据每个位置的梯度计算每个位置的梯度方向、梯度幅值。将梯度方向均分成9个角度区域,然后将

8*8区域内的每个像素根据其梯度方向属于9个角度区域哪个区域进行分配,然后将像素点的梯度幅值加到这个位置,最终生成1个1*9的特征表达。然后再在16*16范围内进行l2归一化,16*16范围内有4个8*8,所以最终会生成4个1*9的vector特征表达,将4个特征表达连接起来就代表了这个16*16最终的梯度直方图。然后再像卷积一样滑动得到不同区域的提取直方图,最终再将这些区域的直方图连接起来就得到最终的特征表达。

 

 

https://blog.csdn.net/zouxy09/article/details/7929348

https://zhuanlan.zhihu.com/p/33059421

posted @ 2017-07-30 17:05  有梦就要去实现他  阅读(365)  评论(0编辑  收藏  举报