图像特征之(一): 方向梯度直方图 Histogram of oriented gradient (HOG)

在cs231n的Assignment1中,最后一个练习涉及道路HOG特征,故而整理一下HOG特征。

HOG特征

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

提出HOG特征的原始论文:《Histograms of Oriented Gradients for Human Detection》

参考博客:https://blog.csdn.net/zouxy09/article/details/7929348

1. 基本思想

HOG特征的基本思想是:local object appearance and shape can often be characterized rather well by the distribution of local intensity gradients or edge directions , even without precise knowledge of the corresponding gradient or edge posistions。

即:局部对象的形状和表象可以被局部梯度或边缘方向的密度分布很好的描述。(统计信息的应用价值)

2. 实现方法简介

在介绍具体实现方法前,先引入一些概念。

  • Cell:将图像用网格划分成均匀小块,每个小块就是一个cell,cell可以是矩形,也可以是原型。例如:将图像用网格进行划分,使得每个cell包括8 \times 8个像素。
  • Block:block由多个cell组成。例如,令每2 \times 2个cells组成一个block。

接下来,介绍具体实现步骤:

  • 将输入图像转为灰度图像。
  • Gamma校正。值得注意的是,论文认为Gamma校正的作用并不明显,因为在block内部做的归一化具有相同的效果。故而在第3节中不做描述。
  • 为每个像素计算梯度。论文表明在smoothing scale为0时,即不做任何平滑处理的情况下,使用一维的梯度算子的效果最好。
  • 将图像划分为cells,通常为8 \times 8个像素/per cell。
  • 统计每个cell的梯度直方图。
  • 将相邻的每几个cell组成一个block,通常为2 \times 2个cells/per block。在每个block内部分别进行归一化。
  • 将所有block的直方图向量结合起来组成一个大的向量,这个向量就是HOG特征。

3. 详细实现步骤

  • step1: 将输入图像转为灰度图像

  • step2: 计算图像梯度

论文表明,采用一维的梯度掩码的效果更好。常用的梯度掩码有:[-1,0,1], [-1,0,1]^T,分别用来计算横坐标和纵坐标方向的梯度。

G_x(x,y) = H(x+1,y) - H(x-1,y)

G_y(x,y) = H(x,y+1) - H(x,y-1)

G(x,y) =\sqrt{G_{x}^{2}+G_{y}^{2}}

\theta(x,y) = arctan (\frac{G_y}{G_x})

其中,G_x(x,y), G_x(x,y), G(x,y), \theta(x,y),分别代表水平方向的梯度、垂直方向的梯度、梯度幅值以及梯度方向。H(x,y)代表在像素点(x,y)(x,y)处的像素值。

  • step3: 为每个cell构建梯度方向直方图

该步骤的目的是对局部图像区域进行编码。

通常将输入图像划分为若干个cell,通常cell大小为8 \times 8个像素。Dial在论文说明,将unsigned角度(0^{^{\circ}},180^{^{\circ}})划分为9个bins,分别为:(0^{^{\circ}},20^{^{\circ}})(20^{^{\circ}},40^{^{\circ}}),...,(160^{^{\circ}},180^{^{\circ}}),并为每个cell计算其对应的直方图。

在计算每个bin对应的值得过程中,根据梯度方向\theta可以确定像素所属的bin,例如:\theta(x,y) = 30^{\circ},则属于(20^{^{\circ}},40^{^{\circ}})区间,即:bin_2;然后根据梯度的幅值计算出相应权重,更新对应bin_2的计数,假设权重=3,则:bin_2 = bin_2 + 3 \times 1

注意:cell可以是矩形的(rectangular),也可以是星形的(radial)。具体请参考论文。

  • step4: 将cells组成block,在block内部进行梯度归一化

由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩。(参考:https://blog.csdn.net/zouxy09/article/details/7929348)

每相邻的几个cell可以组成一个block。Dial在论文中使用的是2 \times 2个cells组成的block,相邻的block之间会有重叠,重叠的多少取决于步长。之所以使用带重叠的block可以保证每个cell都可以在不同的block中发挥作用,进而构成最终的向量。即:we typically overlap the blocks so that each scalar cell response contributes several components to the final descriptor vector, each normalized with respect to a different block. This may seem redundant but good normalization is critical and including overlap significantly improves the performance. 

可以使用不同的block内部归一化方法进行归一化。设e为常数,v为该block对应的非归一化的向量,常用的归一化方法有:

L2-norm: {\displaystyle f={v \over {\sqrt {\|v\|_{2}^{2}+e^{2}}}}}

L2-hys: L2-norm followed by clipping (limiting the maximum values of v to 0.2) and renormalizing。

L1-norm:{\displaystyle f={v \over {\sqrt {\|v\|_{1}+e^{2}}}}}

L1-sqrt:{\displaystyle f={\sqrt {v \over (\|v\|_{1}+e)}}}

  • step5: 将各个block块的归一化后的特征组成一个大向量,构成HOG特征

4. 优点

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

 

你可能感兴趣的:(计算机视觉,cs231n学习笔记)