计算单点方向梯度直方图

Computing Histogram of Oriented Gradients on a single point

HOG(定向梯度直方图)如何处理图像中的单个点?我正在使用计算机视觉工具箱版本的 HOG 描述符:https://www.mathworks.com/help/vision/ref/extracthogfeatures.html.

我想在图像中的特定点上计算 HOG,在单个点上计算 HOG 的最佳像元大小和块大小是多少?

请注意,单个点没有 HOG 描述符这样的东西。 HOG 描述符是一个密集的描述符,因此您可以获得 包围 兴趣点的像素块。 extractHOGFeatures 函数接收图像和可选的一些特定输入坐标,您希望在这些坐标处计算 HOG 描述符。这些是图像中您要为其计算 HOG 描述符的 (x,y) 或列和行位置。您将其指定为 N x 2 矩阵,每一行都是您希望计算 HOG 描述符的位置的 (x,y) 坐标。

回想一下,我们在局部像素块上计算 HOG 描述符。根据 Dalal 和 Triggs 的原始行人检测算法,此局部补丁或 单元格大小 的默认大小为 8 x 8。假设我们忽略直方图中方向的符号,直方图中默认的 bin 数为 9,或者考虑角度以 20 度为增量使总角度为 180 度。对于每个 8 x 8 补丁,我们有一个 9 bin 直方图。您还可以考虑一个 单元格组合 ,它是一个块。每个块由单元网格组成,MATLAB 中的默认网格是 2 x2 网格,使其成为 16 x 16 像素 window。

因此,以您指定的位置为中心,我们围绕这个中心围成16 x 16window。然后计算四个 HOG 直方图 - 一个用于块内的每个单元格。作为最后一步,我们将所有直方图连接在一起形成一个长直方图,因此 4 x 9 = 36 个元素,我们进一步规范化该向量以计算代表该坐标的最终描述符。

输出是一个包含 N 行的矩阵,其中每一行都是位于输入位置矩阵相应行指定的中心位置的描述符。更具体地说,您将得到一个 N x 36 矩阵。

至于最佳块大小和单元格大小,这取决于您的应用程序,但对于大多数用例,尤其是在 OpenCV 中,默认设置为 8 x 8 单元格大小,块大小为2 x 2 从而创建一个 16 x 16 像素补丁。 Dalal 和 Triggs 对不同大小的单元格和块进行了实验,发现这两种大小最适合他们的行人检测用例。