opencv 学习笔记-入门(30)hog+svm 的实现

 一.想要做行人检测,必须要看的一篇论文《Histograms of Oriented Gradients for Human Detection》为Dalal和Bill Triggs的经典之作。

主要实现的流程为

                                   

(1)首先提取图片进行图片的 gamma compression 这样是图片的表面得到变换,其中可采用square root 进行gamma compression, 改变每个通道的颜色情况。

(2)梯度计算,并没有进行高斯平滑,因为高斯平滑会减弱特征的情况,并且提出了几种计算梯度的方式,采用的是[-1 0 1],单维的x,y分别进行了相应的卷积,最后利用梯度公式分别求出了每个颜色通道的梯度,最后选择最大的那个颜色通道的梯度值作为这个图像的梯度值。

(3)方向的计算,可以分为signed(360度)和unsigned(180度),在这里计算角度的时候运用了三线插值,就是每个坐标点所在的cell,对周围的cell进行方向的分享opencv 学习笔记-入门(21)之三线性插值-hog(二),这里我们用高斯核产生的权重来判断分享的方向权重,并且 

opencv 学习笔记-入门(22)之快速hog的减少取样实现-论文笔记,和 

opencv 学习笔记-入门(23)hog的快速积分图像-论文笔记 提出了两种加快的方法。

(4)标准化所分配的方向之和,因为每个cell有9个(unsigned)方向,所以一个block就有36个方向,归一化运用范数的标准,我们采用的是二范数法。

(5)将每个window 64X128 内的所有的block采用cell重叠方法进行提取每个window的特征提取,这样每个窗口就有3780个特征。

(6)将所提取正样本的特征和负样本的特征分别存储到文件中,运用线性svm进行训练,并且利用训练数据进行检测。这样就得到了所要的结果。

二.我采用是第一个快速hog实现的,其中将正负样本都存到了一个动态分配的数组中,并且用1标签正样本,0标签负样本,之后用的opencv中的svm进行的训练,训练过程参照http://opencv.jp/sample/svm.html,讲的很详细,后序我将代码封装下传到网上,并且会尝试其他的加速方法,并且研究行为识别。另外svm学习力推:http://www.blogjava.net/zhenandaci/archive/2009/02/14/254630.html



你可能感兴趣的:(存储,360,compression)