B8 g% M9 L5 e% j
Step2:计算每个像素点的梯度幅值和方向8 y, V: X. D- x, m
: ?, a. o, {" w3 m) z0 X
在预处理完图像之后,我们就需要计算图中每一像素点的梯度幅值以及方向。这里有一点需要注意,对于图像边缘我们需要做一些padding或者放弃边缘的梯度计算。% i; G7 e5 @1 m' Y4 Q1 f
) f- V: g# c: D7 ~9 A2 c
在我讲梯度直方图如何标准化之前,我们先来看看一个长度为3的向量如何标准化。/ L3 n( E& j p, a
) z0 z/ U: j& [, |4 V假设我们有一个RGB颜色向量[128, 64, 32]。这个向量的长度是1282+642+322−−−−−−−−−−−−−√ \sqrt{128^2 + 64^2 + 32^2} ( @/ C; g; m1 ~7 W. I, i128 $ A" r, A' }% }; Y# f. G
27 Q- U/ t6 A/ ?2 ?8 j
+64 ; S4 U' F" F; A: @3 d) o3 d B' U6 C2: f/ t5 s5 y9 m9 O7 q' G
+32 " g; s: m& z4 n, y2 ) K e; g7 R& x5 C/ E: v ( j1 Y" Z/ V0 t 9 J7 [) h) \/ l: t4 L4 p; `1 ^, K =146.64。这也叫做向量的L2范数。将这个向量的所有元素除以向量长度146.64就可以得到一个标准化的向量[0.87, 0.43, 0.22]。' |) o( r1 I4 ^, f8 g
9 y" q) F" z9 f) h! [现在我们知道如何标准化一个向量,你可能想到当计算HOG特征的时候你可以像之前标准化一个3×1向量一样去标准化9×1的直方图。这的确是个不错的想法,但是更好的做法是标准化一个更大的16×16的block。一个16×16的block包含4个直方图(每一个bin的大小为8 x 8),这4个直方图可以连接成一个36×1的向量,而且这个向量仍然可以像那个3×1的向量一样进行标准化。每次标准化后,整个窗口移动8(假设)个像素并再次计算得到一个36×1的标准化向量,就这样一直重复这个过程。 4 @( c5 U& V0 @3 d% x% Y h1 u+ J: J* A. v& Y
Step5:将所有block块的特征组合起来,形成HOG完整的特征描述向量" B, s2 L7 u' V0 j$ p8 T2 @; n
4 ]; e: q# s x4 B' u3 c最后一步就是将检测窗口中所有的block块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。4 u" {5 k7 F1 Z/ q" p* y5 I
& b. W* t) X5 q. G
那么这个大向量的维度是多少?我们来计算:2 G4 j$ x0 H9 a
! y T Z+ s5 B& F4 Q5 z# s8 W, ~
对于64 x 128的图像而言,每8 x 8的像素组成一个cell,每2 x 2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4*9=36个特征,以8个像素为步长。$ x) p- x6 E5 ?* _& F6 g
! H5 J% c: q" T% P; w我们有多少个不同位置的16×16的block?一共有 (64-8)/8=7 个水平的位置和 (128-8)/8=15 个竖直的位置,所以总计7×15=105个。 2 E. U$ N: J; `, \, b* S8 _每一个16×16的block被表示成一个36×1的向量。因此,当我们把他们连接成一个大向量的时候会得到一个36×105=3780维度的向量。/ |- \" \* L" H
梯度直方图可视化 3 g t9 c5 l8 v) G0 k1 t( C. b& D) p! M# `
一个图像块梯度特征的可视化通常通过在所有8×8的cell里画出对应的标准化的9×1向量(直方图)。不幸的是,目前在OpenCV中并没有一个简单的API方法来可视化HOG特征。, S: H$ Q' A- m
; S$ q/ { Y2 L+ Z
三、使用OpenCV给出的API实现HOG) i! t! T" j1 L- p' T8 T
; @2 F8 F( R- E- r, Q2 s* Q4 H
这里我将在OpenCV栏目下介绍OpenCV中HOGDescriptor Struct Reference中的一些方法,如果需要请移步链接:https://blog.csdn.net/qq_40913465/article/details/1060701511 G/ w$ M# e/ X3 j
# y6 t) U. d- t最后感谢以下两片博客给出的参考:( r$ a8 L. B2 w8 ]8 M. |, n
https://baijiahao.baidu.com/s?id=1646997581304332534&wfr=spider&for=pc! C" Y' M K a4 Q* m
https://blog.csdn.net/sinat_34474705/article/details/802196170 q2 C5 M4 `: I9 w j1 [' p
$ q! Y ^! o' [& N) n ; H7 T1 y2 V; \———————————————— 4 Q; g6 G! V% i- U- E# z! M版权声明:本文为CSDN博主「一只工程狮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 & @7 Q& x7 b: Y( V原文链接:https://blog.csdn.net/qq_40913465/article/details/106065027 ; ?: D1 ]: A$ A z9 u9 L : v$ i, M; { ~ 9 v' ]& j, k, p m- r8 G' ]) g