5 w Q/ r( s5 [% U: Z
二、如何计算HOG特征向量. ?! e4 y3 [7 h) B* u
! S7 ~* l2 @* N+ ^2 |* w- D0 i5 YStep1:图片预处理 % n. v u2 i$ y" N$ U a 4 u* k* u: f N8 }) F, V我们需要对图像进行预处理,并将宽高比降低到1:2,图像大小最好是64 x 128。这是因为我们将图像分成8 x 8和16 x 16小块来提取特征。具有指定的大小(64 x 128)将使我们的所有计算相当简单。事实上,这正是原始论文中使用的值。当然完整的图片可以是任意的尺寸。通常我们会在图片的不同位置分析多尺度图片块。唯一的要求就是图片块需要有固定的长宽比。比如:100×200, 128×256或者1000×2000都可以,但101×205就不满足要求9 n2 _, P3 Q9 L1 k4 r9 Q2 E( i6 S
9 P9 V. e( D; v# S. A d X* E8 G回到我们的例子,让我们将大小为64x128作为目前的标准图像大小。以下是调整后的图像: % O8 s8 V4 D" y5 B- z$ B . H4 n; o/ [9 U8 Q 0 [, G( b# I/ d
- B) v3 [( V) u. o" s
4 Y2 o% j: _; V) D. ~
(x,y),H(x,y)分别表示该像素点在X轴方向,Y轴方向的梯度,H(x,y) H(x,y)H(x,y)为该像素点。 ! [, |) V6 X5 _5 ]% p R1 e- _6 d& Q, T. X. r4 r& ^
在计算完像素点的梯度之后,我们需要计算该像素点幅值以及梯度方向,公式如下:& J' K! w- A, R) U
( y: X! H0 a* f4 e+ J. r# C, FHOG特征描述子中创建的直方图不是为整个图像生成,而是将图像分割为8 × 8个单元格(cell),计算每个单元格的方向梯度直方图。通过这样做,我们得到了代表整个图像的小块的特征(或直方图)。我们当然可以把这个值从8 x 8换成16 x 16或者32 x 32。 @1 e+ F" Z* w
2 k. n5 ^! K7 p- y9 |' \我们采用9个bin的直方图来统计这8 x 8个像素的梯度信息。也就是将cell的梯度方向360度分成9个方向块,如下图所示,对cell内每个像素用梯度方向在直方图中进行加权投影(映射到固定的角度范围),就可以得到这个cell的梯度方向直方图了,就是该cell对应的9维特征向量(因为有9个bin)。 & S: p. a3 B4 Y4 f5 m& P # M; ^) R. _. M3 q* C5 q2 r
- E- {4 p- c; ^. C2 I
我们在上图的8×8的cells上查看梯度的大小和方向。每个bin是基于梯度方向选出来的,对应的票数(加在当前bin上的值)对应着梯度的大小。我们先来看看用蓝色圆圈出来的像素,它的梯度的角度是80°,大小为2。因此它在第5个bin上加2。图中用红色圈出来的梯度的角度是10°,大小是4。由于10°是在0°和20°的中间位置,因此根据10°到0°和20°的距离比例,将10°对于的幅值按比例加到0°和20°的bin中去,计算如下:: i, @/ k2 J0 u' h! I. s