HOG+SVM
什么是HOG特征?
特征就是某个像素进行四则运算后得到的结果,HOG特征也满足这个定义。梯度直方图特征(HOG) 是一种对图像局部重叠区域的密集型描述符, 它通过计算局部区域的梯度方向直方图来构成特征。
HOG特征的计算步骤
- 模块划分(image win block cell)
- 梯度 方向 模板
- bin 投影
- 每个模块hog
模块划分(image win block cell)
从图中我们可以看出image>win>block>cell,win是特征涉及最顶层单元---》obj
涉及滑窗,自然有步长:block step 、win step 、cell bin
win size 是任意的,常用的是64*128
block位于蓝色窗体中,一般win宽高一般是block的整数倍 配套64*128时block是16*16,block要在win中滑动,每次滑动多少个像素,这是它的步长step,假设为8*8的话,计算block要在win窗体中能存在多少个((64-16)/8+1)*((128-16)/8+1)=105个block
当block大小为16*16时,cell size一般设置为8*8,block在窗体win中是滑动的概念,所以在图中红色的block是重叠放置的,但是可以看到在block中cell是并列放置的,这就说明cell并不具备滑动的概念,从而一个16*16的block中可以放置4个8*8的cell
梯度 方向 模板
每个像素都有梯度:大小 f 、方向 angle
若将360度按90度进行划分,可以划分9块,也就是0-360/40=9bin
由此,可以得出HOG特征(即可以完全描述一个obj的所有信息),它的维度=105*4*9=3780
每个像素都有一个梯度》HOG==win窗体下所有像素的特征组合在一起
特征模版-》haar类似
【1 0 -1】【【1】【0】【-1】】
a = p1*1+p2*0+p3*(-1) = 相邻像素之差
b = 上下像素之差
f = 根号下(a方+b方)
angle = arctan(a/b)
bin 投影 梯度
bin 0-360划分为9bin,每个bin的范围是0-40度,但是每个bin不是连续的,被分为两个连续的范围,如下的bin1
bin1 第一个连续的范围是0-20度,第二个连续的范围是180-200度
如果我们知道某一个像素具体位于哪一个bin内我们是知道的,但是它的投影是多少,怎么计算,到底投影多少?对于像素ij f a = 10° ,10°刚好位于0-20°之间,那么我们可以认为它投影在了bin1上,190°位于180°-200°之间也可以认为是在bin1上。当一个像素的角度并不在某一个bin的中心时,这是它会被分解到相邻的两个bin上,例如a=
25°,被分解在 bin1和bin2上
在bin1上的幅值:f1 = f*f(θ)
在bin2上的幅值:f2 = f*(1-f(θ))
其中f(θ)的值在0-1.0之间 (此方法一般计算量比较大,可以采用投影到某个区间+1 hog)
在前面的讲解中,我们要明确特征是3780维的,整体的HOG特征描述的就用这个3780维的向量,3780维来自于win窗体
《-win(block cell bin,其实每一个维度,就是一个bin
下面将某一个block进行分解:
cell0: bin0 bin1 。。。bin8
cell1: bin0 bin1 。。。bin8
cell2: bin0 bin1 。。。bin8
cell3: bin0 bin1 。。。bin8
对于cell中的每一个元素来说,bin代表了梯度,可以将这一点的幅值记录下来例如对于像素ij在cell0上,梯度为bin0,幅值为f0。同时,对于一些像素来说,会在投影在两个bin中,有两个幅值,需要讲这些梯度权重累加sumbin0(f0+f1.。)= bin0
cell复用
我们知道一个block 4个cell,在进行计算的时候,我们还将block进行另外一个维度的划分cellx0 cellx2 cellx4
cellx0:ij-》bin bin+1 (只对当前cell起作用,分解成2个bin)
cellx2:ij -》 cell2 cell3-》bin bin+1 bin bin+1 (作用在两个cell上,分解成4个bin)
cellx4:ij (作用在4个cell上,分解成8个bin)
判决
【bin 9】【4cell】【105】 = 3780
【3780】hog -->svm line训练,得到一个【3780】维的向量
【3780】hog *svm【3780】维的向量 = 值
当这个值大于某一阈值时判定为目标obj