我的讲师在edge histograms
上为image retrieval
添加了幻灯片,他声明必须先将图片划分为4x4 blocks
,然后检查horizontal, vertical, +45°, and -45° orientations
处的边缘。然后他说这是用14x1 histogram
表示的。我不知道他是如何决定必须创建14x1 histogram
的。有谁知道他是如何提出这个值的,或者如何创建edge histogram
?
感谢。
答案 0 :(得分:3)
你所指的东西叫做方向梯度直方图(HoG)。但是,数学不适用于您的示例。通常,您将选择空间分级参数(4x4块)。对于每个块,您将计算在某些不同方向上的梯度幅度(在您的情况下,只有2个方向)。因此,在每个块中,您将进行N_{directions}
次测量。将其乘以块数(16个为您),您可以看到总计16*N_{directions}
总计。{/ p>
要形成直方图,只需将这些测量值连接成一个长矢量即可。只要您跟踪将bin / direction组合映射到1-D直方图中的插槽的方式,任何进行连接的方法都可以。这种连接的长直方图最常用于机器学习任务,例如训练分类器根据其渐变方向识别图像的某些方面。
但是在你的情况下,教授必须做一些特别的事情,因为如果你有16个不同的图像块(一个4x4网格的图像块),那么你需要计算每个块不到1个测量结果总体直方图中总共有14次测量。
或者,教授可能意味着你采用[-45,+ 45]之间的角度范围,然后将其分为14个不同的值:-45,-45 + 90/14,-45 + 2 * 90 / 14,......等等。
如果这就是教授的意思,那么在这种情况下,你会在一个街区内获得14个方向箱。一旦所有内容连接起来,你就会有一个很长的14 * 16 = 224分量向量来描述整个图像。
顺便说一句,我已经使用Digary of Gradient的Python实现进行了大量测试,因此您可以看到一些链接here或here的工作。该网站还有一些示例代码,但在scikits.image中出现了更受支持的HoG版本。