图像特征之(一): 方向梯度直方图 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

 

方向梯度直方图Histogram of Oriented Gradients,HOG)是一种常用的图像特征提取方法,在物体检测和识别中广泛应用。下面我将简单介绍如何使用MATLAB进行HOG特征提取。 首先,我们需要加载图像,并将其转换为灰度图。使用MATLAB的imread函数读取图像,并将其转换为灰度图像,可以使用rgb2gray函数实现。 然后,我们使用MATLAB的gradient函数计算图像的水平梯度和垂直梯度。这可以通过以下代码实现: [dx, dy] = gradient(image_gray); 接下来,我们可以计算每个像素点的梯度幅值和梯度方向。可以使用以下代码实现: grad_magnitude = sqrt(dx.^2 + dy.^2); grad_direction = atan2(dy, dx); 然后,我们需要将图像划分为小的区域(Cell)。每个Cell中包含多个像素点。例如,可以将图像划分为16x16像素的Cell,可以使用MATLAB的mat2cell函数实现。 接下来,我们需要计算每个Cell中的梯度方向直方图。我们将梯度方向划分为多个方向的bins(例如8个bins),然后使用MATLAB的histcounts函数计算每个bin中梯度方向的数量。 最后,我们需要将所有Cell中的梯度方向直方图连接起来,形成最终的特征向量。可以使用MATLAB的reshape函数将所有直方图连接起来。 综上所述,通过上述步骤,我们可以使用MATLAB实现方向梯度直方图特征提取。特征提取后的HOG向量可以用于物体检测和识别任务,例如使用支持向量机进行分类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值