1

我的讲师有幻灯片edge histogramsimage retrieval他说必须首先将图像分割成4x4 blocks,然后检查horizontal, vertical, +45°, and -45° orientations. 然后他说这在 a 中表示14x1 histogram。我不知道他是如何决定14x1 histogram必须创建 a 的。有谁知道他是如何得出这个值的,或者如何创建一个edge histogram

谢谢。

4

1 回答 1

3

您所指的东西称为定向梯度直方图(HoG)。但是,数学不适用于您的示例。通常您会选择空间分箱参数(4x4 块)。对于每个块,您将计算一些不同方向的梯度幅度(在您的情况下,只有 2 个方向)。因此,在每个块中,您都会进行N_{directions}测量。将其乘以块数(您为 16 个),您会看到16*N_{directions}总测量值。

要形成直方图,您只需将这些测量值连接成一个长向量。只要您跟踪将 bin/direction 组合映射到 1-D 直方图中的插槽的方式,任何进行连接的方法都可以。然后,这种长的串联直方图最常用于机器学习任务,例如训练分类器以根据图像的梯度方向识别图像的某些方面。

但是在您的情况下,教授必须做一些特别的事情,因为如果您有 16 个不同的图像块(图像块的 4x4 网格),那么您需要计算每个块少于 1 个测量值才能得到总共整体直方图中的 14 个测量值。

或者,教授可能意味着您取 [-45,+45] 之间的角度范围,并将其分为 14 个不同的值:-45、-45 + 90/14、-45 + 2*90/14、 ... 等等。

如果这就是教授的意思,那么在这种情况下,您会在一个街区内获得 14 个方向箱。将所有内容连接起来后,您将拥有一个非常长的 14*16 = 224 分量向量来描述整个图像。

顺便说一句,我已经对梯度直方图的 Python 实现进行了很多测试,因此您可以在此处此处查看链接的一些工作。该站点上也有一些示例代码,尽管更受支持的 HoG 版本出现在scikits.image中。

于 2012-04-07T04:18:11.077 回答