【问题标题】:Final vectors in Histogram of oriented gradient定向梯度直方图中的最终向量
【发布时间】:2018-11-03 08:56:09
【问题描述】:

图像的尺寸为 64 x 128。即 8192 个幅值和梯度值。在分箱阶段之后,我们剩下 1152 个值,因为我们根据它们的方向将 64 个像素转换为 9 个分箱。你能解释一下在 L2 归一化之后我们是如何得到 3780 个向量的吗?

【问题讨论】:

    标签: opencv histogram gradient


    【解决方案1】:

    假设:您有 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 向量连接成一个巨型向量。让我们计算一下大小:

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

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

    更多详情请关注the tutorial where I learned.

    希望对你有帮助!

    【讨论】:

    • 第一段应该是192像素值。想编辑吗?
    • 好的,现在我有 3780 个向量。如何在 learnopencv.com 上绘制一些东西(Usain Bolt 周围的渐变)?基本上,我想在我的主题上创建一个边界框。我在可视化部分苦苦挣扎。
    猜你喜欢
    • 2011-08-01
    • 2017-12-10
    • 2013-06-22
    • 1970-01-01
    • 2015-01-21
    • 2013-11-08
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多