定向梯度直方图中的最终向量

Final vectors in Histogram of oriented gradient

图像的尺寸为 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 向量一样对其进行归一化。然后 window 移动 8 个像素,并在此 window 上计算一个标准化的 36 x 1 向量并重复该过程(参见动画:Courtesy

计算HOG特征向量

这就是你的问题所在。

为了计算整个图像块的最终特征向量,将 36 x 1 向量连接成一个巨大的向量。让我们计算一下尺寸:

  1. 我们有多少个 16 x 16 块的位置?有 7 个水平位置和 15 个垂直位置,这给出了 - 105 个位置。

  2. 每个 16 x 16 块由一个 36 x 1 向量表示。因此,当我们将它们全部连接成一个巨大的向量时,我们得到一个 36 x 105 = 3780 维向量.

详情请看the tutorial where I learned.

希望对您有所帮助!