《Python人脸识别:从入门到工程实践》 ——3.6.4 HOG特征

举报
华章计算机 发表于 2020/02/20 18:54:21 2020/02/20
【摘要】 本节书摘来自华章计算机《Python人脸识别:从入门到工程实践》 —— 书中第3章,第3.6.4节,作者是王天庆 。

3.6.4 HOG特征

HOG即方向梯度直方图(histogram of oriented gradient),是在计算机视觉和图像处理中被广泛使用的一种算法,是一种可以进行图像检测的特征描述算子。

HOG特征的提取是通过计算统计图像中各个小区域的方向梯度直方图,然后将其进行汇总而得到的。该算法的本质思想是对图像的梯度信息进行统计,梯度主要存在于图像的边缘区域,局部目标能够被梯度或边缘的方向密度分布进行描述。与其他特征描述子相比,HOG特征具有对图像的几何变换、光学变化良好的鲁棒性等优点。

在介绍HOG特征提取的具体原理前,首先介绍一下梯度的概念。

在大学高等数学或者大学物理的课程中我们或许接触过梯度这个概念,标量场的梯度是一个向量场,它指向标量场中方向变化最快的方向。例如,在单变量的实值函数中,梯度的大小就是这个函数的导数,线性函数的斜率就是梯度的具体数值。

图像中的像素点只有数值的概念,而不存在方向的概念,因此,图像也是由标量组成的集合,它是一个标量场,其梯度是一个向量场。例如,在灰度图像中,指向图像中像素的灰度值变化最快的方向,其变化的快慢可以用该梯度值的大小来表示。

有了梯度这个概念,就容易理解HOG特征的具体过程了。

1.图像分块

对整张图片计算HOG特征,即便是内容相差很大的图片之间的区别也不明显。但是,将图片划分为不同的小块,并对每一个图片块计算HOG特征,这些内容不同的小图片块的HOG特征一般区别会比较大。因此,在对一张图片计算HOG特征时,先要对图片进行分块,这个图片块被称作细胞单元。

在对图像进行分块之前,要先进行一些预处理。对于彩***片,要先转换为灰度图片,然后对该灰度图片进行Gamma校正,以便校正图片亮度不均匀的情况,调节图片整体亮度。

对图片进行分块也可以理解成以窗口的形式在图片上进行滑动,然后不断地计算每一个窗口中扫描部分的HOG特征。那么在对图片进行分块时就会产生一个问题:图片块之间的内容是否应该重合呢?换句话说,使用滑动窗口在图片上进行扫描时,窗口扫描到的区域是否应该重叠。例如,对某张包含人脸图像的图片提取HOG特征时,如果按照窗口之间不重叠的扫描原则,那么一个人的双眼很有可能被分到两个不同的图像块中,而反过来说,如果使用小步长的窗口进行滑动,人的双眼图像绝大多数情况下可以被包含到同一个图像块中。毕竟,使用小步长的滑动窗口,图像块中存在重叠区域,所包含的内容更多,不容易漏掉某些细节。但是,这样做的缺点也是显而易见的,这个过程有点类似于“穷举”过程,计算量一定会增加不少。

因此,两种图片块划分的方法各有利弊,一个偏重于准确率,另一个偏重于计算速度。这是一个“鱼与熊掌”的问题。

2.计算梯度

图像中每个像素点的梯度计算方法如下:

image.png

式中,Gx(x,y)、Gy(x,y)分别代表图像中位置为(x,y)的像素点的水平方向与竖直方向的梯度值,I(x,y)表示图像中位置为(x,y)的像素点的灰度值。

像素点(x,y)的梯度幅值和大小就可以使用下面的式子来表示:

image.png

对每一个图像块(也就是细胞单元)中的每一个像素点计算其梯度,然后将每一个像素点的梯度方向进行汇总,以直方图的形式来表示,其梯度幅值大小作为直方图中的权重,这个直方图就是所谓的梯度方向直方图。

例如,我们可以将直方图中的桶划分为6个方向,划分方式如图3-17所示。

在图3-17中,将梯度的方向360°划分为16份,这个梯度总的方向也可以选择180°。图3-17采用的是弧度制的表示方式,最大值也就是2π。

image.png

 图3-17 方向梯度直方图角度区间的划分

有了划分区间之后,就可以将每一个像素点按照其梯度方向进行归类了。然而,每一个像素点的梯度大小是不同的,要想反映出梯度幅值的大小,就需要通过在每个角度区间中加入的值不同来反映,也就是将梯度幅值的大小作为权值表现在直方图中。例如,某一个像素点的梯度方向是10°,那么该点需要归到0,π8的区间范围中,而其幅值大小是2,那么这个直方图范围内的数值就加2。当然,这只是一个示例,具体的算法并不一定是自增2,也可以是以该幅值大小为参数的函数计算结果。

 

3.梯度强度归一化

由于局部光照变化以及前景-背景对比度的变化会导致梯度具有比较大的变化,因此需要对梯度强度进行归一化处理。归一化能够进一步对光照、阴影和图像边缘进行压缩,使特征的计算结果更具鲁棒性。

归一化的具体做法是将上述所有的图像块进行汇总,使其组合成大的、在空间上连通的区域。这样,将所有的小图像块的特征进行串联后,就可以反映图片整体特征了。在进行归一化时,所采用的算法一般是计算其L2范数。在经过归一化后,就可以用特征向量来对图像进行表示了。有了特征向量,便可以对图像进一步地进行处理了。如常常使用SVM算法根据该特征进行分类,可以应用到行人人脸检测等具体的场景中去。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。