1.hog特征提取—9维特征向量
步骤1:灰度化(将输入的RGB三通道图像转化为单通道图像);
步骤2:采用gamma校正法对输入图像进行颜色空间的标准化,校正公式为:
I
(
x
,
y
)
=
I
(
x
,
y
)
g
a
m
m
a
I(x,y)=I(x,y)^{gamma}
I(x,y)=I(x,y)gamma
其中gamma=1/2, 通过Gamma压缩处理,可以降低光照变化以及局部图像阴影的影响;
步骤3:计算图像梯度,包括每个像素点的梯度值和梯度方向。x方向和y方向的卷积核分别为:
G
x
=
[
−
1
,
0
,
1
]
,
G
y
=
[
1
,
0
,
−
1
]
T
G_{x}=[-1,0,1],G_{y}=[1,0,-1]^{T}
Gx=[−1,0,1],Gy=[1,0,−1]T
得到
I
(
x
,
y
)
I(x,y)
I(x,y)水平方向梯度
G
x
(
x
,
y
)
G_{x}(x,y)
Gx(x,y)(水平向右为正方向),垂直方向梯度
G
y
(
x
,
y
)
G_{y}(x,y)
Gy(x,y)(垂直向上为正方向),每个像素点的梯度
G
(
x
,
y
)
G(x,y)
G(x,y)和梯度方向
α
(
x
,
y
)
α(x,y)
α(x,y)分别为:
G
(
x
,
y
)
=
G
x
2
+
G
y
2
G(x,y)=\sqrt{G_{x}^{2}+G_{y}^{2}}
G(x,y)=Gx2+Gy2
α
(
x
,
y
)
=
a
r
c
t
a
n
(
G
x
(
x
,
y
)
G
y
(
x
,
y
)
)
\alpha (x,y)=arctan(\frac{G_{x}(x,y)}{G_{y}(x,y)})
α(x,y)=arctan(Gy(x,y)Gx(x,y))
步骤4:构建9维hog特征向量:
将图像分成若干个“cell”,例如每个cell为66个像素。采用9个bin的直方图来统计这66个像素的梯度信息。也就是将cell的梯度方向360度分成9个方向块,如下图所示:若某个像素的梯度方向是0-20度或180-200度,直方图第1个bin的计数就加一,这样,对cell内每个像素用梯度方向在直方图中进行加权投影(权值与梯度值相关,如该像素点梯度值为3,权值即为3),就可以得到这个cell的梯度方向直方图了,就是该cell对应的9维特征向量(即9个bin直方图)。
2.归一化截断
通过归一化截断得到每个cell对应的36为特征向量。已知
C
(
i
,
j
)
C(i,j)
C(i,j)为第
(
i
,
j
)
(i,j)
(i,j)个cell的9维特征向量,与其相邻的特征向量为:
[
C
(
i
−
1
,
j
−
1
)
C
(
i
−
1
,
j
)
C
(
i
−
1
,
j
+
1
)
C
(
i
,
j
−
1
)
C
(
i
,
j
)
C
(
i
,
j
+
1
)
C
(
i
+
1
,
j
−
1
)
C
(
i
+
1
,
j
)
C
(
i
+
1
,
j
+
1
)
]
\begin{bmatrix} C(i-1,j-1) &C(i-1,j) &C(i-1,j+1) \\ C(i,j-1) &C(i,j) &C(i,j+1) \\ C(i+1,j-1) &C(i+1,j) &C(i+1,j+1) \end{bmatrix}
⎣⎡C(i−1,j−1)C(i,j−1)C(i+1,j−1)C(i−1,j)C(i,j)C(i+1,j)C(i−1,j+1)C(i,j+1)C(i+1,j+1)⎦⎤
定义
N
β
,
γ
N_{\beta,\gamma}
Nβ,γ为:
N
β
,
γ
=
(
∣
∣
C
(
i
,
j
)
∣
∣
2
+
∣
∣
C
(
i
+
β
,
j
)
∣
∣
2
+
∣
∣
C
(
i
+
β
,
j
+
γ
)
∣
∣
2
+
∣
∣
C
(
i
,
j
+
γ
)
∣
∣
2
)
1
/
2
N_{\beta,\gamma }=(||C(i,j)||^{2}+||C(i+\beta,j)||^{2}+||C(i+\beta,j+\gamma)||^{2}+||C(i,j+\gamma)||^{2})^{1/2}
Nβ,γ=(∣∣C(i,j)∣∣2+∣∣C(i+β,j)∣∣2+∣∣C(i+β,j+γ)∣∣2+∣∣C(i,j+γ)∣∣2)1/2
则36维特征向量
H
(
i
,
j
)
H(i,j)
H(i,j)即为:
H
(
i
,
j
)
=
(
M
i
n
(
N
−
1
,
−
1
(
i
,
j
)
,
C
(
i
,
j
)
)
M
i
n
(
N
1
,
−
1
(
i
,
j
)
,
C
(
i
,
j
)
)
M
i
n
(
N
1
,
1
(
i
,
j
)
,
C
(
i
,
j
)
)
M
i
n
(
N
1
,
1
(
i
,
j
)
,
C
(
i
,
j
)
)
)
H(i,j)=\begin{pmatrix} Min(N_{-1,-1}(i,j),C(i,j))\\ Min(N_{1,-1}(i,j),C(i,j))\\ Min(N_{1,1}(i,j),C(i,j))\\ Min(N_{1,1}(i,j),C(i,j)) \end{pmatrix}
H(i,j)=⎝⎜⎜⎛Min(N−1,−1(i,j),C(i,j))Min(N1,−1(i,j),C(i,j))Min(N1,1(i,j),C(i,j))Min(N1,1(i,j),C(i,j))⎠⎟⎟⎞
3.PCA降维
下图是36个主成分,前12个横条和竖条状的特征向量占据大部分,分别按行和按列求和,一共得到4+9=13维特征向量。
图片来源于论文《Object Detection with Discriminatively Trained Part Based Models》
4.计算有方向梯度,得到18维特征向量
上述1、2、3是假设梯度无方向,考虑有方向的梯度,那每个Cell就有360/20=18维hog特征,再由第2步得到4*18维特征,然后按行求和得到18维特征向量,此时不再进行列求和。故无向和有向一共31维向量。
5.fhog特征提取示意图
整幅图像划分为若干个Cell,得到特征图。
C++(OpenCV版)fhog特征提取代码:https://github.com/ll1041327742/fhog
参考链接:
【1】https://blog.csdn.net/zouxy09/article/details/7929348
【2】https://blog.csdn.net/sysu_yuhaibao/article/details/76599926
【3】原DPM论文《Object Detection with Discriminatively Trained Part Based Models》