2012-04-06 172 views
1

我的讲师在edge histograms上对image retrieval进行了滑动,他声明必须首先将图像分成4x4 blocks,然后检查horizontal, vertical, +45°, and -45° orientations处的边缘。他然后说,这是代表14x1 histogram。我不知道他是如何决定创建14x1 histogram的。有谁知道他是怎么想出这个价值的,或者如何创建一个edge histogram图像检索 - 边缘直方图

谢谢。

回答

3

你所说的东西叫做面向梯度直方图(HoG)。但是,数学不适合你的例子。通常您会选择空间装仓参数(4x4块)。对于每个块,您将计算一些不同方向的梯度大小(在您的情况下,只有2个方向)。因此,在每个区块中您都会有N_{directions}的测量值。将其乘以块的数量(您的16个),并且您看到您有总计量的16*N_{directions}

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

但在你的情况下,教授必须做一些特殊的事情,因为如果你有16个不同的图像块(一个4×4的图像块网格),那么你需要计算每块不到1个测量结果总直方图中共有14个测量值。

或者,教授可能意味着您将角度范围设置为[-45,+ 45],然后将其分成14个不同的值:-45,-45 + 90/14,-45 + 2 * 90/14,...等等。

如果这就是教授的意思,那么在这种情况下,你可以在一个区块内获得14个定位箱。一旦所有东西都连接在一起,你就会有一个非常长的14 * 16 = 224-分量矢量来描述整个图像。顺便提一下,我已经使用渐变柱状图的Python实现进行了大量测试,因此您可以看到链接herehere的一些工作。该网站上还有一些示例代码,虽然更好支持的HoG版本出现在中。

+0

为什么只有我的2个方向?当然有4.从左到右,从上到下,从左下到右上,从左上到右下。你介意稍微解释直方图吗?我很困惑如何使用梯度幅度来创建直方图。我总是看到直方图在Y轴上有频率,但我不确定在这种情况下频率是多少。 – TheBoss 2012-04-08 18:46:24

+1

当我说只有2个方向的时候,我在你的第一个帖子旁边,你只说+/- 45度。很显然,在实践中,你会希望有更多的方向,而不是我之后澄清的,当我说你的教授可能意味着你采取-45到+45之间的所有方向并将它们离散为方向网格。有两种不同的方法。有时候人们会离散化整个方向圈,有时候他们只会离散圈的一半。大多数情况下,你只关心绝对方向,标志无关紧要。 – ely 2012-04-08 20:54:44

+2

至于“频率”轴,在这种情况下,您将计算一个全新的“图像”,其中每个“像素”包含该像素的梯度大小。如果(i,j)处的像素具有梯度大小M和梯度方向D,则可以确定方向D属于哪个角度区间(基于您选择的离散化角度网格),并且在该直方图的那个区域中添加幅度M.因此,给定像素对直方图的“频率”是该像素处的梯度幅度。 – ely 2012-04-08 20:56:39