特征提取--hog

来源:互联网 发布:sql sever 编辑:程序博客网 时间:2024/05/19 16:38
更详细的参见zouxy博客:http://blog.csdn.net/zouxy09/article/details/7929348
终于到10月了,终于可以松一口气了,整理一下hog的算法流程。
首先要有一个整体的认识,每一个目标都对应一个一维特征向量,这个向量一共有n维,这个n不是凭空瞎猜的,是有理有据,打个比方,为什么opencv自带的hog检测子是3781维的?这个问题在初期确实比较头疼,纠结了好长的时间,不过别着急,
我们先来看一下opencv里的HOGDescriptor这个结构的构造函数HOGDescriptor(Size winSize,Size blocksize,Size blockStride,Size cellSize,...(后面的参数在这里用不到)),去查一下opencv默认的参数我们可以看到,winSize(64,128),blockSize(16,16),blockStride(8,8),cellSize(8,8),很显然hog是将一个特征窗口win划分为很多的块block,在每一个块里又划分为很多的细胞单元cell(即胞元),hog特征向量既是把这些所有的cell对应的小特征串起来得到一个高维的特征向量,那么这个窗口对应的一维特征向量维数n就等于窗口中的块数 x 块中的胞元数  x 每一个胞元对应的特征向量数。
写到这里,我们计算一下3781如何得到的,窗口大小64x128,块大小16x16,块步长8x8,那么窗口中块的数目是((64-16)/8+1)*((128-16)/8+1) = 7*15 =105个块,块大小为16x16,胞元大小为8x8,那么一个块中的胞元cell数目是 (16/8)*(16/8) =4个胞元,到这里我们可以看到要求最后需要的维数n,只需要计算每一个胞元对应的向量,这个参数在哪呢?别急,我们把每一个胞元投影到9个bin(如何投影?这里卡了很长一段时间,后面会说),那么每一个胞元对应的向量就是9维,每个bin对应该9维向量的一个数,现在看一下是不是计算窗口维数的三个需求量都知道了,n = 窗口中的块数 x 块中的胞元数  x 每一个胞元对应的特征向量数,带入看一下n= 105x4x9 = 3780,这就是这个窗口对应的特征了。有人会说,为什么opencv里的getDefaultPeopleDetector()得到的是3781维呢?这是因为另外一维是一维偏移,(很崩溃是吧,我也崩溃很久。。。,下一段解释)。
我们利用hog+svm检测行人,最终的检测方法是最基本的线性判别函数,wx + b = 0,刚才所求的3780维向量其实就是w,而加了一维的b就形成了opencv默认的3781维检测算子,而检测分为train和test两部分,在train期间我们需要提取一些列训练样本的hog特征使用svm训练最终的目的是为了得到我们检测的w以及b,在test期间提取待检测目标的hog特征x,带入方程是不是就能进行判别了呢?

转载:http://hi.baidu.com/susongzhi/item/3a3c758d7ff5cbdc5e0ec172

HOG中的三线性插值

   

                  

                                                             图1 

    所谓的三线性插值指的是在(x,y,theta)这三个参数空间中进行插值,即x方向、y方向和梯度的角度空间,如图1所示,图中的象素点(x,y)在利用梯度幅值作为权重进行投票时,要根据该象素点距离其他格子中心的距离进行加权,同时该象素点的梯度方向也要在其相邻的区间内进行插值,用数学公式描述如下式所示。

                       

 

                    

                                                      图2 三线性插值示意图

     

    三线性插值在具体实现中,可以利用LUT(look-up-table)来快速计算,若是采用积分直方图,则可以采用Wang等[Wang, 2009]提出的卷积三线性插值方法(Convoluted Trilinear Interpolation,CTI)快速计算,更多关于三线性插值的描述见[Pang, 2011]. 以下用一个简单的例子来说明。

    设图2中所示象素点的梯度方向是85度,梯度幅值是100,该象素点距离格子中心的左、右、上、下的距离分别为2、6、2、6。首先考虑梯度方向上的插值,若每20度为一个区间,85介于70和90之间,到第三个和第四个区间中心的距离分别为15和5,因此若投票值为v,则投票到第三个区间的值是(5/20)*v=0.25v,投票到第四个区间的值是(1-1/4)*v=0.75v。接下来考虑在xy方向上的插值,根据象素点距离各个格子中心的距离,可知在x方向上的权重分配系数为6/8、2/8,在y方向上的权重分配系数也为6/8、2/8。所以梯度幅值分配到第一个格子的值为100*6/8*6/8=56.25,分配到第二个格子的值为100*2/8*6/8=18.75,分配到第三个格子的值为100*6/8*2/8=18.75,分配到第四个格子的值为100*2/8*2/8=6.25。最后,根据梯度方向上的投票权重,可知:第一个格子的直方图第三个区间得到的投票值为56.25*0.25=14.0625,第一个格子的直方图第四个区间得到的投票值为56.26*0.75=42.1875;第二个格子的直方图第三个区间得到的投票值为18.75*0.25=4.6875,第二个格子的直方图第四个区间得到的投票值为18.75*0.75=14.0625;以此类推,可求出第三个和第四个格子的直方图特征。

 

参考文献 

[Wang, 2009] X. Wang, X. Han, and S. Yan. A HOG-LBP human de­tec­tor with par­tial oc­clu­sion han­dling [A]. In Proc. of ICCV[C], 2009.

[Pang, 2011] Y. Pang, Y. Yuan, X. Li, et al. Efficient HOG human detection [J]. Signal Processing, 2011, 91: 773-781.


0 0
原创粉丝点击