【发布时间】:2018-11-03 08:56:09
【问题描述】:
图像的尺寸为 64 x 128。即 8192 个幅值和梯度值。在分箱阶段之后,我们剩下 1152 个值,因为我们根据它们的方向将 64 个像素转换为 9 个分箱。你能解释一下在 L2 归一化之后我们是如何得到 3780 个向量的吗?
【问题讨论】:
图像的尺寸为 64 x 128。即 8192 个幅值和梯度值。在分箱阶段之后,我们剩下 1152 个值,因为我们根据它们的方向将 64 个像素转换为 9 个分箱。你能解释一下在 L2 归一化之后我们是如何得到 3780 个向量的吗?
【问题讨论】:
假设:您有 64 x 128 补丁的渐变。
计算 8x8 单元格中的梯度直方图
这就是它开始变得有趣的地方。图像被划分为 8x8 单元格,并为每个 8x8 单元格计算一个 HOG。我们使用 8x8 单元的原因之一是它提供了紧凑的表示。一个 8x8 图像补丁包含 8x8x3 = 192 个像素值(彩色图像)。这个补丁的梯度每个像素包含 2 个值(大小和方向),总计 8x8x2 = 128 个值。这 128 个数字使用 9-bin 直方图表示,该直方图可以存储为 9 个数字的数组。这使得它更加紧凑,并且在一个补丁上计算直方图使得这种表示对噪声更加鲁棒。
直方图本质上是一个由 9 个 bin 组成的向量,对应于角度 0、20、40、60 ... 180,对应于无符号梯度。
16 x 16 块标准化
根据图像的梯度创建直方图后,我们希望描述符不受光照变化的影响。因此,我们对直方图进行归一化。 RGB 颜色 [128, 64, 32] 的向量范数是 sqrt(128*128 + 64*64 + 32*32) = 146.64,这是臭名昭著的 L2-norm。将此向量的每个元素除以 146.64 即可得到归一化向量 [0.87, 0.43, 0.22]。如果我们将此向量的每个元素乘以 2,则归一化向量将保持与以前相同。
虽然简单地对 9x1 直方图进行归一化很有趣,但对更大的 16 x 16 块进行归一化会更好。一个 16 x 16 的块有 4 个直方图,可以将它们连接起来形成一个 36 x 1 的元素向量,并且可以像示例中的 3 x 1 向量一样对其进行归一化。然后将窗口移动 8 个像素,并在此窗口上计算归一化的 36 x 1 向量并重复该过程(参见动画:Courtesy)
计算 HOG 特征向量
这就是你的问题所在。
为了计算整个图像块的最终特征向量,将 36 x 1 向量连接成一个巨型向量。让我们计算一下大小:
我们有多少个 16 x 16 块的位置?有 7 个水平位置和 15 个垂直位置,即 - 105 个位置。
每个 16 x 16 块由一个 36 x 1 向量表示。因此,当我们将它们全部连接成一个巨大的向量时,我们会得到一个36 x 105 = 3780 维向量。
更多详情请关注the tutorial where I learned.
希望对你有帮助!
【讨论】: