本文主要是介绍HOG算法思路和应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
梯度直方图特征(HOG) 是一种对图像局部重叠区域的密集型描述符, 它通过计算局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。
HOG特征是一种局部区域描述符,它通过计算局部区域上的梯度方向直方图来构成人体特征,能够很好地描述人体的边缘。它对光照变化和小量的偏移不敏感。
图像中像素点(x,y)的梯度为
幅度代表变化的强度,跳跃的强烈性!还有上面梯度计算选择是跨一个像素之间计算差值,这样的好处是可以更加近似我们的导数,这个是可以通过泰勒证明!
统计的话是将0~180°内分为9个方向,即没20°为一个方向bin,上述的式子计算出来的每个像素的角度,进行直方图的统计,在每个bin上面累加其对应的梯度幅值!
不是简单的加1。如下图所示
上面是对每个cell单元格进行统计的,最后再链接几个cell组合成block,再对每个block里面进行归一化。这里block的归一化是指由cell拼接成的高维向量进行归一化,拼接不是在每个维上面做加法。归一化函数由以下几种:
由于Cell单元格是HOG特征最小的结构单位,而且其块Block和检测窗口Win的滑动步长就是一个Cell的宽度或高度,所以,先把整个图像分割为一个个的Cell单元格(8*8像素)。
Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。例如,对于64*128的图像而言,每2*2的单元(16*16的像素)构成一个块,每个块内有4*9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。
在行人检测过程中,除了上面提到的HOG特征提取过程,还包括彩图转灰度,亮度校正等步骤。总结一下,在行人检测中,HOG特征计算的步骤:
(1)将输入的彩图转换为灰度图;
(2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化); 目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
(3)计算梯度;主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
(4)将梯度投影到单元的梯度方向;目的是为局部图像区域提供一个编码,
(5)将所有单元格在块上进行归一化;归一化能够更进一步对光照、阴影和边缘进行压缩,通常,每个单元格由多个不同的块共享,但它的归一化是基于不同块的,所以计算结果也不一样。因此,一个单元格的特征会以不同的结果多次出现在最后的向量中。我们将归一化之后的块描述符就称之为HOG描述符。
(6)收集得到检测空间所有块的HOG特征;该步骤就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。
总结:
HOG算法对光照不敏感性,因而也大量的应用在人脸识别领域,这里额外提及下关于另外的一个算法LBP,这两个算法的共同点都是反映局部纹理信息,然后窜连所有局部整合成一个全局纹理信息描述子。并且他们对光照不敏感的有异性,使得他们在人脸识别上面大展拳脚。不过HOG还在行人检测方面也突出了良好的表现,也常用于这方面的应用。
参考文献:
http://blog.csdn.net/carson2005/article/details/7782726
这篇关于HOG算法思路和应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!