数字图像处理---行人检测

数字图像处理----行人检测

行人检测概述

目前行人检测方法主要分为两类

1.基于背景建模:利用背景建模方法,提取处前景运动的目标,在目标区域内进行特征提取,然后利用分类器进行分类,判断是否包含行人。

2.基于统计学的方法:根据大量的样本构建行人检测分类器。提取的特征主要有目标的灰度、边缘、纹理、颜色、梯度直方图等信息。分类器主要包括神经网络、SVM、adaboost 以及深度学习。

另外,目前的行人检测基本上都是基于法国研究人员Dalal在2005的CVPR发表的HOG+SVM的行人检测算法(Histograms of Oriented Gradients for Human Detection, Navneet Dalel,Bill Triggs, CVPR2005)。

我们小组选择的就是上述HOG+SVM 的方法。

HOG 和 SVM 的简单介绍

在机器学习中,支持向量机(英语:Support Vector Machine,常简称为SVM,又名支持向量网络[1])是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

上述内容来自维基百科-------https://zh.wikipedia.org/wiki/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA-------------------------------

通俗的讲,我们将大量的已经标注类别的数据(我们使用的时候就是行人/非行人两类)交给SVM训练,只要样本数据能够较好的体现两类数据的区别,在训练好SVM之后,我们输入未知分类的数据,SVM就可以比较准确的给出我们此数据的类别(是否包含行人)

 

方向梯度直方图英语:Histogram of oriented gradient,简称HOG)是应用在计算机视觉和图像处理领域,用于目标检测的特征描述器。这项技术是用来计算局部图像梯度的方向信息的统计值。HOG描述器是在一个网格密集的大小统一的细胞单元(dense grid of uniformly spaced cells)上计算,而且为了提高性能,还采用了重叠的局部对比度归一化(overlapping local contrast normalization)技术。

上述内容来自维基百科-------https://zh.wikipedia.org/wiki/%E6%96%B9%E5%90%91%E6%A2%AF%E5%BA%A6%E7%9B%B4%E6%96%B9%E5%9B%BE-

翻译成比较容易理解的话就是:图像中物体的局部外观和形状能够通过其局部梯度或边缘信息很好地表征和描述,即HOG可以描述图像中物体的局部外观和形状。结合上面的SVM,我们可以通过HOG提取大量的图片的特征信息,并标注图片是否有行人,以及行人的位置,并交给SVM训练。在大量数据的训练之后,SVM就可以区分行人。

HOG算法实现

假设识别窗口大小为:(winSize.width,winSize.height)。HOG将梯度方向(0—>360°)划分为nbins个区间。然后设置一个block其大小为(blockSize.width,blockSize.height),每个block分为许多cell(cellSize.width,cellSize.height)。对每个cell,算出每一点的梯度方向和模,按梯度方向增加每个bin 的值,形成每个cell 的梯度直方图。cell串联成块,块内归一化直方图,消除光照阴影的映像。block是在图像中边移动边计算的,其移动的方向为:从上到下,从左到右。步长blockStride为(blockStride.width,blockStride.height)。有了每个block的梯度直方图之后,然后多个block内的直方图向量一起串联成一个大的HOG特征向量。这个向量的大小如下面的公式:

nbins*

(blockSize.width/cellSize.width)*

(blockSize.height/cellSize.height)*

((winSize.width-blockSize.width)/blockStride.width+1)*

((winSize.height-blockSize.height)/blockStride.height+1);

即梯度方向数*每个block包含的cell 的个数*(水平方向移动次数+1)*(垂直方向移动次数+1)

对于opencv 中的实现,该值为:9*(16/8)*(16/8)*((64-16)/8+1)*(128-16)/8+1))=3780。这就是这个窗口对应的特征了。

结合图片便于理解

窗口大小

数字图像处理---行人检测_第1张图片

块大小 blockSize

数字图像处理---行人检测_第2张图片

cell大小

数字图像处理---行人检测_第3张图片

  • 梯度计算

    梯度算子:水平边缘算子: [-1, 0, 1] ;垂直边缘算子: [-1, 0, 1]T 

 

    图像中像素点(x,y)的梯度为:

数字图像处理---行人检测_第4张图片

作者测试后发现模板越简单效果越好,因此HOG 的梯度计算就是这么简单。

  • 直方图统计的方向单元划分

所谓的梯度直方图,就是一块区域的各个梯度方向的直方图。这里有一个选择就是梯度方向个数的选取,作者测试后发现把方向分为9个通道效果最好。另外,每个块的形状可以是矩形或圆形的,梯度直方图的方向取值可以是0-180°或者0-360°,取决于梯度是否有正负。

  • HOG描述器中的区块block

为了克服光照不均匀以及前景和背景的对比差异,梯度直方图必须归一化。HOG的做法是将连接在一起的cell串联到一起组成block,然后block内进行归一化。HOG描述器是block 在前面描述的识别窗口内边移动(原论文中移动步长一般为block 大小的一半)边计算并串联起来得到的。因此这些block通常会重叠,每个方格不只一次影响了最后的描述器,这样会有信息的冗余,但是能提高算法的精确度。主要有两种block。矩形R-HOG,原形C-HOG。我们选择矩形R-HOG,R-HOG由三个参数表示:每个block多少cell、每个cell有几个像素、每个通道有几个通道。在作者的测试中,发现当block size过大或者过小,对于局部图像的适应能力将会减弱 。block 内 cell 的个数为 3*3 或者2*2 的时候会有性能提升,另外,cell大小为6*6 ~ 8*8 的时候识别率比较好。这就有一个问题,就是应该如何选择cell 大小和block 大小,作者给出的答案是,使用特征选择机制如(AdaBoost)来帮助我们选择参数,而不是手动现实编码。这里我们取cell 8*8,block 2*2 cell

  • 为每个cell构建梯度方向直方图

这一步是为了统计局部图像梯度信息然后进行量化,得到局部图像区域的特征描述向量,同时能够保持对图像中人体对象的姿势和外观的若敏感性。

我们采用9个bin的直方图来统计这8*8 个像素的梯度信息。也就是将cell 的梯度方向360°分成9个方向块。这样梯度方向与bin有对应关系如下:

1 [0,40)
2 [40,80)
3 [80,120)
4 [120,160)
5 [160,200)
6 [200,240)
7 [240,280)
8 [280,320)
9 [320,0)

这样就可以得到这个cell 的梯度方向直方图了,就是该cell 对应的9维特征向量(因为有9个)。另外,这里直方图的大小就是梯度的大小,作者测试后这样的效果最好,不用另外进行直方图与梯度大小的代数变换。

  • 把cell组合成大的块(block),块内归一化梯度直方图

由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大,需要对梯度强度做归一化。归一化能够进一步对光照、阴影和边缘进行压缩。

  1. 将多个临近的cell组成一个block块,然后对其梯度方向直方图向量

  2. 采用L2-Norm with Hysteresis threshold 方式进行归一化,即将直方图向量中横坐标最大值限制为0.2 一下,然后再重新归一化依次。

一个cell 会被多个block“共享”,另外,每个“cell”在被归一化时都是“block”无关的,每个cell 在其所属的block 中都会被归一化依次,得到一个vector。每个cell 的特征会议不同的结果多次出现在最后的特征向量中。

  • 归一化以及四种归一化方法的介绍

Dalal和Triggs采用了四种不同的方法对区间进行归一化,并对结果进行了比较。引入image表示一个还没有被归一化的向量,它包含了给定区间(block)的所有直方图信息。image 表示 imagek 阶范数,这里的image。用 image 表示一个很小的常数。这时,归一化因子可以表示如下:

数字图像处理---行人检测_第5张图片

  还有第四种归一化方式:L2-Hys,它可以通过先进行L2-norm,对结果进行截短(clipping),就是将直方图的最大值限制到0.2,然后再重新归一化得到。

作者发现:采用L2-Hys, L2-norm, 和 L1-sqrt方式所取得的效果是一样的,L1-norm稍微表现出一点点不可靠性。但是对于没有被归一化的数据来说,这四种方法都表现出来显著的改进

其中范数的概念如下:

数字图像处理---行人检测_第6张图片

  • 生成HOG特征描述向量

这一步相对比较简单,将所有归一化后的block 梯度直方图串联起来就形成了最后的HOG特征描述向量。

 

 

参考链接

http://blog.csdn.net/ttransposition/article/details/11880425

http://blog.csdn.net/ttransposition/article/details/41805767

http://blog.csdn.net/ttransposition/article/details/11874285

http://blog.csdn.net/zhazhiqiang/article/details/21047207

http://blog.csdn.net/qianqing13579/article/details/46509037

http://blog.csdn.net/carson2005/article/details/7841443

https://zh.wikipedia.org/wiki/%E6%96%B9%E5%90%91%E6%A2%AF%E5%BA%A6%E7%9B%B4%E6%96%B9%E5%9B%BE#.E6.8F.8F.E8.BF.B0.E5.99.A8.E5.8D.80.E5.A1.8A

http://www.cnblogs.com/lxy2017/p/3926760.html

http://blog.csdn.net/abcjennifer/article/details/7365651

你可能感兴趣的:(数字图像处理---行人检测)