引言
向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。
主要思想
一副图像中,局部目标表观和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(其本质在于:梯度的统计信息,而梯度主要存在于边缘的地方,就类似于LBP编码的统计信息,大家都是用直方图来表示)。首先将图像分成小的连通区域,通常称细胞单元(cell)。然后采集胞元中各像素点的梯度的或边缘的方向直方图,最后把这些直方图组合起来就可以构成一种特征描述了。
block
把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。
与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。
HOG特征提取
对检测窗口进行如下操作:
1)颜色空间归一化
由于图像的采集环境、装置等因素,采集到的图像效果可能不是很好,容易出现误检或漏检的情况,所以需要对采集到的人脸进行图像预处理,主要是处理光线太暗或太强的情况,这里有两次处理:图像灰度化、Gamma校正。
1、灰度处理
对于彩色图像,将RGB分量转化成灰度图像,其转化公式为:
2、gamma校正
在实际情况下,图像经常会出现照度不均匀、局部阴影等情况,为了达到较好的检测效果,检测器需要对光照不敏感。这里一般使用Gamma校正法对输入图像进行颜色空间的标准化(归一化),从而将图像整体亮度提高或降低,调节图像的对比度,减少图像局部的阴影和光照变化带来的影响,提高算法对光照的鲁棒性。
关于gamma矫正
在实际中可以采用两种不同的方式进行Gamma标准化,平方根、对数法。这里我们采用平方根的办法,公式如下(其中γ=0.5、1/2.2):
为什么使用gamma矫正?
这里不得不提到韦伯定律,那么,什么是韦伯定律呢?其定义为感觉的差别阈限随原来刺激量的变化而变化,且表现为一定的规律性,即
其中 Φ 为原刺激量,
使用须知
作者在他的博士论文里有提到,对于涉及大量的类内颜色变化,如猫,狗和马等动物,没标准化的RGB图效果更好,而牛,羊的图做gamma颜色校正后效果更好。gamma校正需要适应你的数据,你需要分析你的数据特性,需不需要把图像变亮\暗一点。
int main()
{
Mat picture = imread("test.jpg", 0);//灰度
Mat img;
picture.convertTo(img, CV_32F); //转换成浮点
sqrt(img, img); //gamma校正
normalize(img, img, 0, 255, NORM_MINMAX, CV_8UC1);//归一化像素值[0,255]
imshow("原图", picture);
imshow("Gamma校正", img);
waitKey();
return 0;
}
2)每个像素点的梯度计算(大小、方向)
主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。对经过颜色空间归一化后的图像,求取其梯度及梯度方向。分别在水平和垂直方向进行计算,水平梯度算子: [−1 0 1] ,垂直梯度算子: [−1 0 1]T 。