图像处理:HOG, Haar-like, LBP


一.HOG

方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种常见的的图像特征,可用于目标跟踪以及目标检测等领域。Dalal在2005年的CVPR会议上提出用HOG特征已经SVM分类器进行行人检测。

简单来讲,HOG就是统计图片中某块区域内不同方向梯度值的分布。

具体步骤如下:

HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口)

(1)灰度化(将图像看做一个x,y,z(灰度)的三维图像)

(2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化),目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰

(3)计算图像每个像素的梯度(包括大小$\sqrt{I_x^2+I_y^2}$和方向$\tan^{-1}\frac{I_y}{I_x}$),主要是为了捕获轮廓信息,同时进一步弱化光照的干扰

(4)将图像划分成小cells(例如$6\times6$像素/cell)

(5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的特征描述向量,具体解释如下:

1

2

如上两图,首先将360°分成16份,代表16个梯度方向区间。我们之前计算了cell内每个像素的梯度方向和大小,根据每个像素点的梯度方向,利用双线性内插法将其幅值大小累加到直方图中,于是得到第二张图

(6)将每几个cell组成一个block(例如每个block包含$3\times3$个cell),一个block内所有cell的特征向量串联起来便得到该block的HOG特征向量

(7)将图像image内的所有block的HOG特征串联起来就可以得到该目标(你要检测的目标)的HOG特征了。这个就是最终的可供分类使用的特征向量了

注意,在分cell的时候有两种方式,overlap和non-overlap,也就是有重叠和无重叠,overlap的时候有点像CNN里卷积核对图像进行卷机操作里的步长小于cell大小,而non-overlap又有点像池化时没有重叠,关于这两个的利弊如下:

先说overlap,这种分割方式可以防止对一些整体的物体的切割开来而导致影响特征表达能力,例如分割的时候正好把眼睛从中间一分为二,overlap的缺点是计算量大,因为重叠区域的像素需要重复计算。non-overlap,缺点就是上面提到的,有时会将一个连续的物体切割开,得到不太“好”的HOG特征,优点是计算量小,尤其是与Pyramid(金字塔)结合时,这个优点更为明显。

Opencv里关于HOGDescriptor参数的解释可以看这里

二.LBP

LBP比较好理解,原始的LBP算子定义为在$3\times3$的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,$3\times3$邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。

另外还有好多LBP的改进版本,主要是由之前的矩形转换为圆形从而使算子具有灰度和旋转不变性。

LBP的应用中,如纹理分类、人脸分析等,一般都不将LBP图谱作为特征向量用于分类识别,而是采用LBP特征谱的统计直方图作为特征向量用于分类识别。

三.Haar-like

Haar-like最早是应用在人脸识别领域,后来opencv也集成了Haar-like特征提取功能。

3

如上图,haar特征就是以上特征模版,边缘特征、线性特征、中心特征和对角线特征等。这些模版的黑色代表正值,白色代表负值,而且白色权值与面积的加权和与黑色相同。矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征,如:在24*24像素大小的检测窗口内矩形特征数量可以达到16万个。

通过积分图,只需要遍历一次图片,便可以快速计算任意大小的haar特征,具体方法可以参考论文,也可以参考最后一部分的参考资料。

有那么多的矩形特征,哪些才是对分类器分类最有效的?Viola人脸检测的论文是通过AdaBoost算法来训练,具体见浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联

参考资料

Histogram of Oriented Gridients(HOG) 方向梯度直方图

图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联