HOG特征详解-----梯度方向直方图


HOG全称histogram of oriented gradients.如翻译成中文就是方向梯度直方图

步骤一:了解图像的梯度

在讲HOG(方向梯度直方图)之前,我们先要知道图像的梯度是什么。

这里我们先用一个最简单的黑白图来演示一下:
在这里插入图片描述

首先我们先计算x方向上的梯度(也就是水平方向),我们要做的是从图像的 左边到右边进行扫描,黑色的像素为0,白色像素值为255,当我们从黑色扫描到白色时,像素值突然从0变到了255,这就产生了一个梯度差,如下图的梯度图像所示:

在这里插入图片描述

可以看到,梯度图像中,因为像素值从0到了255升高了,是个正的梯度,所以白色的部分表示这里是一个正的梯度(圆形的左侧),再继续扫描,从白色突然变到黑色,从255突然变到了0,像素值下降了,是个负梯度,用黑色部分表示负梯度(圆形右侧)

同理,我们可以得出垂直方向上的梯度图像,如下图:

在这里插入图片描述

步骤二:计算每个点的梯度强度和梯度方向

现在知道了什么是梯度之后,我们要如何计算梯度呢?

这里假设一个像素点A,他的上下左右四个方向上的相邻像素值为:
在这里插入图片描述

对于像素点A,要计算水平梯度和竖直梯度,如上图,水平梯度gx\boldsymbol{g}_{\boldsymbol{x}}=30-20=10,竖直梯度 gx\boldsymbol{g}_{\boldsymbol{x}} =64-32=32.

那么总的梯度强度值g和梯度方向θ\boldsymbol{\theta }将按照以下公式计算:
g=gx2+gy2 \boldsymbol{g}=\sqrt{\boldsymbol{g}_{\boldsymbol{x}}^{2}+\boldsymbol{g}_{\boldsymbol{y}}^{2}}

θ=arctangxgy \boldsymbol{\theta }=\arctan \frac{\boldsymbol{g}_{\boldsymbol{x}}}{\boldsymbol{g}_{\boldsymbol{y}}}

梯度方向将会取绝对值,因此梯度方向的范围是0-180度。取绝对值的原因是这样效果更好。

步骤三:计算梯度直方图

按照上一步的计算,每一个像素点都会有两个值:梯度强度/梯度方向。

现在就计算梯度直方图,这也是HOG的关键步骤。

梯度直方图是在一个8x8的cell里面计算的(这里的cell就是将一幅图像分成好多个小块,每个小块里有8x8=64的像素值),如下图所示:
在这里插入图片描述

那么在8x8的cell里面就会有8x8x2=128个值(注意这里不是像素值,只是一个数值),这里的2是包括了梯度强度和梯度方向。通过统计形成梯度直方图,128个值将会变成9个值,大大降低了计算量,同时又对光照等环境变化更加地鲁棒

那是怎么把128个值将会变成9个值呢?

首先,我将0-180度分成9个bins,分别是0,20,40…160。然后统计每一个像素点所在的bin。

在这里插入图片描述

左上图是8x8的梯度方向值,右上图是8x8的梯度强度值,下图是9个bins。

先看两个蓝色圈圈。因为蓝圈的方向是80度,大小是2,所以该点就投给80这个bin;

再看两个红色圈圈。因为红色圈圈的方向是10,大小是4,因为10距离0点为10,距离20点为也为10,那么有一半的大小是投给0这个bin,还有一半的大小(即是2)投给20这个bin。

那么统计完64个点的投票数以后,每个bin就会得到一个数值,可以得到一个直方图,在计算机里面就是一个大小为9的数组。
在这里插入图片描述

从上图可以看到,更多的点的梯度方向是倾向于0度和160度,也就是说这些点的梯度方向是向上或者向下,表明图像这个位置存在比较明显的横向边缘。因此HOG是对边角敏感的,由于这样的统计方法,也是对部分像素值变化不敏感的,所以能够适应不同的环境。

步骤四:对16*16大小的block归一化

归一化的目的是降低光照的影响。因为在前面的步骤中,我们根据图像的梯度创建了一个直方图。图像的梯度对整体亮度是敏感的。如果通过将所有像素值除以2来使图像变暗,则渐变幅度将改变一半,因此直方图值将改变一半。理想情况下,我们希望描述符不受光照变化的影响。换句话说,我们希望使直方图正常化(归一化),这样它们不会受到光照变化的影响。

归一化的方法是向量的每一个值除以向量的模长。

比如对于一个(128,64,32)的三维向量来说,模长是1282+642+322=146.642\sqrt{128^2+64^2+32^2}=146.642

那么归一化后的向量变成了(0.87,0.43,0.22)

那么16x16大小的block是怎么来的?如下图:
在这里插入图片描述
绿色方块是8x8大小的cell,蓝色方块就是由4个cell组成的block。作者提出要对block进行normalize。那么由于一个cell就会有大小为9的vector,四个cell就有36大小的vector。对block进行normalize就是对这大小为36的vector进行归一化。

而每一个block将按照从左到右,从上到下的移动方式进行迭代截取。

步骤五:计算HOG特征向量

每一个16x16大小的block将会得到36大小的vector。那么对于一个64x128大小的图像,按照上图的方式提取block,将会有7个水平位置和15个竖直位可以取得,所以一共有7x15=105个block,所以我们整合所有block的vector,形成一个大的一维vector的大小将会是36x105=3780。

得到HOG特征向量,就可以用来可视化和分类了。

定向梯度直方图的可视化

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章