HOG特征小白手册

hog特征,即方向梯度直方图(Histogram of Oriented Gradient, HOG)特征,是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。我们将从方向梯度直方图这个名字入手,逐步讲解hog特征提取。

1.梯度

既然是叫方向梯度直方图特征,那我们首先就需要知道,什么是梯度。梯度一词使用广泛,不同的地方意义可能不同,但都包含一个元素,就是高低,像生活中的梯子,也就是高低不同所产生的。梯度就是高低之差,那我们这里的高低是指什么呢,自然是指像素的大小,所以梯度就是相邻像素大小之差。

具体计算梯度时方法可能不尽相同,我们这里使用如下算子来计算每个像素的梯度:

即每个像素水平梯度为左右两个像素大小相减,垂直梯度为上下两个像素大小相减:

G(x,y)=g_{x}(x,y)+g_{y}(x,y)

g_{x}(x,y)=I(x+1,y)-I(x-1,y)

g_{y}(x,y)=I(x,y+1)-I(x,y-1)

每个像素梯度大小即为:

g=\sqrt{g_{x}^{2}+g_{y}^{2}}

2.方向

我们刚刚只介绍了梯度大小,我们接下来要说的方向就是梯度的方向。我们既然已经知道了一个像素的水平梯度和垂直梯度,这两个梯度的向量和即为真实的梯度。方向如下:

\theta =arctan\frac{g_{y}}{g_{x}}

3.直方图

梯度和方向应该不难理解,那么方向梯度直方图特征中的直方图又是什么意思呢?

大家知道,直方图是用来统计一堆数据的频数分布的,如果我们只对单个像素进行分析,自然不会涉及直方图。所以,我们需要多个像素点的梯度来构建直方图。我们把多个像素构成的这个集合称为细胞(cell)。我们这里假设使用的cell取8×8的大小,即64个像素点。我们通过它们梯度的大小和方向来构建直方图,具体步骤如下:

首先对空间角度进行划分

如图所示,假设每20°为一块,则将180°分为了9块,然后我们构建一个9维的特征向量,习惯上我们把这里每一维称为一个bin。每一个像素的梯度方向,在哪个角度范围内,就将其梯度大小加到哪一个bin里面。(这个过程也叫做bin方向投影)

比如说一个像素梯度大小为20,方向为15°,则在0-20°对应的bin里面加20。

下面找了一张bin方向投影过程的图,图中只分了4个bin(即每45°一个bin)细胞大小为3×3,我们这里是9个bin,细胞大小为8×8,不过方法上都是大同小异的。

为什么这里只划分了180°而不是360°?因为如果梯度方向大于180°,只需将值变为负,再加到对应的相反方向的bin里。一个bin里的值可正可负。

4.hog特征提取

知道了什么是hog特征,那我们一般是怎样从图像中提取hog特征的呢?

首先给图像设定一个需要提取hog特征的窗口,这个窗口可以是图像本身(这时提取整张图片的hog特征):

很多博客没有提到窗口这个概率,而是直接将图片大小设为了64×128,把整张图像看作窗口,我们这里的窗口也使用同样的大小。

在窗口中,我们将其划分为8×8大小的细胞,即每个窗口此时包含了8×16个细胞,每个细胞包含了一个9维特征(9个bin)。接下来我们使用比细胞更大一层的块(block)来滑动提取这些特征,这里设置的块大小为16×16。

这里块的滑动步长为8,很明显,滑动过程中,块与块会产生重叠。大部分的细胞会被块多次扫描到。每一次滑动,块都会将其所覆盖的4个细胞的特征向量连接起来,组成一个更长的新的特征向量。原来每个细胞有9个bin,所以一块滑动一次将会得到36个bin。

一个16×16的块在64×128的窗口滑动总共会生成4×9×(8-1)×(16-1)=3780个bin,最后将所有bin连起来得到一个3780维的特征向量,习惯叫做特征描述子。

这个3780维的特征描述子,就是我们所提取的窗口的hog特征。

5.完整的特征提取过程

1、色彩和伽马归一化

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

2、计算图像梯度

3、构建方向的直方图

这里的直方图构建是以每个细胞为单位,每个细胞是不重复的,构建完直方图后,细胞就成了之后计算的最小单位(之后的过程像素不会被用到),每个细胞对应一个直方图(一个9维的特征描述子)。

4、每个细胞的特征进行提取

通过块的滑动对细胞的特征进行提取,块与块之间会有重叠,大部分细胞的特征描述子会被多次提取。同时对每一块的特征描述子进行归一化来使描述符不受光照变化的影响。

5、收集HOG特征

将前面每一块所提取的特征描述子相连即为整个窗口的hog特征。对于64*128的窗口而言,每8*8的像素组成一个cell,每2*2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4*9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。

6.后记

1.梯度的计算方法不一,除了本文介绍的算子,像sobel算子这种也常用于梯度的计算。

2.在梯度直方图方向划分时,是对180°而不是360°进行划分,这样是为了让方向相反的梯度能放入同一个bin里,只是正负不同而已。

3.窗口、块、细胞大小不唯一,本文的大小是用于行人检测中比较好用的一组大小。比如为什么窗口宽高比是1:2而不是2:1?因为用于行人检测需要高比宽更长的窗口。

4.在前面我们讲到如果梯度的角度为15°,我们会将它放入0-20°这个bin里。但是这其实是不准确的,试想一下,一个19°和21°的特征,明明很接近却要分入不同的两个bin里,这样的误差是很大的。所以我们可以按照插值的思想,将19°的梯度按比例分别放入0-20°和20-40°两个bin里。

5.hog特征具有很明显的缺点,就是不具有尺度不变性和角度不变性,这从它的提取过程就能很明显的看出这两个不足。

发布了33 篇原创文章 · 获赞 148 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40692109/article/details/104238261
今日推荐