原文;https://blog.csdn.net/u012336567/article/details/55809016
图像特征提取在对象检测中具有重要的地位,许多论文提出过许多里程碑式的特征,比如LAB特征,HOG特征等。
HOG特征及FHOG特征(Deformable Part Model中HOG的一种变种)都是利用了图像的梯度信息作为图像信息的描述工具,其基本的思想可以查看HOG的wiki页面:
在一副图像中,局部的表象和形状(apparence and type)能够被梯度或者边缘的方向密度分布很好的描述
1.HOG
HOG特征的提出在2005年CVPR的会议上,全称Histogram of Orientation Gradient.
1.1 HOG 算法的实现
输入图像作者采用的是没有gamma矫正的RGB颜色空间图像。
1.1.1梯度计算
正如作者在论文中说的,人脸识别检测器对于如何计算像素点的梯度比较敏感。在作者的论文中指出经过大量的实验,发现最简单的才是最有效的。
也就是对图像不采用高斯平滑的情况下使用 -X方向的分梯度模板; -Y方向上的分梯度模板。利用这两个模板遍历整个图像过后,每个点都具有在x和y方向两个分梯度值,通过这两个值利用以下的公式可以计算出总的梯度值,和角度。
对于彩色的图片(也就是可能具有多通道的图片),我们在每个通道上均计算相应的值,然后选取梯度最大的通道作为该像素点的梯度向量。
1.1.2 空间/方向bin投票
接下来的工作就是要把梯度向量聚集起来。
每个像素都有自己的投票空间。该投票空间是这样划分的出来的,将图像分解为的cell,如图每个cell大小为8X8,并且cell与cell之间没有重叠部分。比如我们有 64X128的图片,经过上面的划分出(64/8)X(128/8)=128个cell。
在每个Cell中,我们构建对于方向的投票。方向可以是0 ~ 180度(无符号的梯度)或者0 ~ 360度(有符号的梯度)。论文中采用的是0 ~ 180度的无符号梯度投票。将0~180度平均分解成9个方向。像素的投票的值是实际梯度大小值。
在投票时为了reduce aliasing,我们会使用线性插值的方法进行投票。例如当前点的方向为65、梯度大小为20,这就需要向60度投票15,向80度投票5.
1.1.3 构建Block和归一化
在一幅图像中像素点梯度的大小范围可能因为受到光照和前景-背景对比度的变化而产生较大的差异。所以一个有效的方法就是依据局部cell的对比度进行归一化。
在HOG中局部对比度正则化的尺度是一个Block,Block的尺寸的大小是16X16,也就是一个Block中包含2X2个cell。另外每次block移动的步长为8 pixels,所以Block和Block之间是有重叠的,这样保证同一个cell的不同的归一化结果(cell在不同的Block中被归一化)能对最后的HOG向量都有贡献。
每个Block的特征描述是他包含的4个cell的投票结果的级联,也就是4*9=36维。遍历图像每获得一个36维的Block特征之后需要进行归一化,归一化的方法有很多,比如L1,L2,L2-Hys等。
论文的作者采用的是L2-Hys正则化方法
假设v是是36维未经正则化的向量,表示的2范式,是一个很小的值,防止除0错误。下面是L2-norm的方法
L2-Hys是在该公式计算出的结果的基础上,对36维中的每一维进行截断,限制每一维的最大值为0.2。
1.1.4 final descriptor
对于图像上的遍历的每一个block进行正则化后,将图像中所有的Block的descriptor收集起来就是整个图片的特征。
对于64X128的图像,可以分解成[(64-16)/8+1]X[(128-16)/8+1]=105个Block,每个具有Block36维特征(4 cell * 9 orientation),所以整个图像有105X4X9维特征。