Histogram of Oriented Gradient

Paper : Histograms of Oriented Gradients for Human Detection
Code :

摘要

方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。HOG特征结合SVM分类器已经被广泛应用于图像识别中,不过现在大多数CV的特征提取已经被CNN所替代。
本文主要介绍HOG descriptor的计算方法,而忽略Human Detection部分。

计算流程

算法的整体流程如下
Histogram of Oriented Gradient

Gamma 校正

Gamma 校正属于图像点处理的一种,可以调整图片的亮度。Gamma校正公式如下所示

J(r,c)=255[I(r,c)255]1γ J(r,c) = 255\cdot [\frac{I(r,c)}{255}]^{\frac{1}{\gamma}}

γ>1.0\gamma >1.0时,效果如下所示
Histogram of Oriented Gradient
γ<1.0\gamma < 1.0时,效果如下所示
Histogram of Oriented Gradient
从直方图来看,gamma校正的效果如下所示

Histogram of Oriented Gradient

计算梯度

计算梯度的方式可以有多种,在离散情况下可以用多种梯度算子来估计梯度,给定图象U(m,n)U(m,n)在两个正交方向H1,H2H_1,H_2上的梯度H1(m,n)H_1(m,n)H2(m,n)H_2(m,n)如下

g(m,n)=U(m,n)H(m,n) g(m,n) = U(m,n)*H(m,n)

边缘的强度和方向由下式给出

g(m,n)=g12(m,n)+g22(m,n)g1(m,n)+g2(m,n)q(m,n)=arctang2(m,n)g1(m,n) \\g(m,n) = \sqrt{g_1^2(m,n)+g_2^2(m,n)} \\ \approx |g_1(m,n)|+|g_2(m,n)| \\q(m,n) = \textrm{arctan} \frac{g_2(m,n)}{g_1(m,n)}

常用梯度算子如下

Histogram of Oriented Gradient

计算元胞内梯度直方图

将图像划分成若干个元胞(例如6 * 6pixel/cell),统计每个元胞的梯度直方图。所谓的梯度直方图实际上就是一个一维向量,向量的长度就是设定的bin值,而向量中元素的大小表示该元胞内梯度属于所处角度范围内的像素点的梯度之和,这样即可形成每个元胞的特征描述子 。细胞单元可以是矩形的,也可以是星形的。

合并元胞为块

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

Histogram of Oriented Gradient

收集HOG特征

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