HOG特征检测算法——原理详解
HOG特征检测算法
原文出处:
N. Dalal, and B. Triggs, Histograms of oriented gradients for human detection, Computer Vision and Pattern Recognition, CVPR 2005, Google Citations: 21911
目的:
最近在学习黄老师的视频处理与分析,其中一节讲到了HOG特征检测算法,该算法是一个非常经典的算法,在这儿将上课学到的知识以及课下查询的知识做一个简单的整理。
HOG算法的流程:
-
正则化与伽马校正
首先判断输入的图像是否为灰度图像,如果不是灰度图像,需要进行图像的转化,具体的公式为:
将转化后的图像进行gama校正与压缩,目的是要改善图像的灰度。在图像照度不均匀的情况下,可以通过Gamma校正,将图像整体亮度提高或降低。如果实验结果没有提升,这一步可以省略。
- 计算梯度
也可以用算子进行卷积运算。
-
统计梯度直方图
目的是为局部图像区域提供一个编码,同时能够保持对图像中人体对象的姿势和外观的弱敏感性。
- block的计算
这里假设图像为128 * 64像素,选择8 * 8为一个cell,2 * 2个cell为一个block,那么计算当前有多少个block会有一个固定的公式为:
[(128-8x2)/8+1]x[(64-8x2)/8+1]由计算公式可以看出块的移动步长为1,块是有重叠的,而不是并行排列的。
- cell
将图像划分成若干个cells(单元),8x8=64个像素为一个cell,相邻的cell之间不重叠。在每个cell内统计梯度方向直方图,将所有梯度方向划分为9个bin(即9维特征向量),作为直方图的横轴,角度范围所对应的梯度值累加值作为直方图纵轴,每个bin的角度范围如下。一般来说,不加改进的HOG算法一般是不考虑正反方向的,那么故可以理解上图。
如上图所示:例如:如果这个像素的梯度方向是20-40度,直方图第2个bin的计数就加一,这样,对cell内每个像素用梯度方向在直方图中进行加权投影(映射到固定的角度范围),就可以得到这个cell的梯度方向直方图了,就是该cell对应的9维特征向量(因为有9个bin)。
像素梯度方向用到了,那么梯度大小呢?梯度大小就是作为投影的权值的。例如说:这个像素的梯度方向是20-40度,然后它的梯度大小是2(假设啊),那么直方图第2个bin的计数就不是加一了,而是加二(假设啊)。
如果恰巧落在了边缘上可以设定一种规则即可。
局部特征的采样区域尝试了矩形和圆形两种方式,圆形局部特
征区域的采样方式基于这样一个事实- 即灵长类视觉神经细胞
感受野的形状为圆形,但实验结果并没有体现出更好的效果,
矩形由于计算的方便性,而成为一般的局部采样方式。
-
直方图归一化处理:
由于光照、对比度的局部差异,梯度强度在图像上的分布不均匀,因此需要进行归一化,以平衡整个检测窗口内的不同块的直方图分布。
必须要注意的一点是局部归一化全局归一化不起作用。
- 用分类器进行训练
HOG算法的缺点:
HOG算法采用了太多的参数,参数选择是一个很重要的工作。
HOG算法只能刻画形状信息,受噪声干扰很大。