HOG:在对比度归一化步骤中做了什么?

Som*_*ing 3 computer-vision

根据HOG过程,如用于人体检测的定向梯度直方图(参见下面的链接)中所述,对比度归一化步骤在分箱和加权投票之后完成.

我不明白 - 如果我已经计算了细胞的加权梯度,那么图像对比度的归一化现在如何帮助我呢?

据我了解,对比度归一化是在原始图像上完成的,而对于计算渐变,我已经计算了ORIGINAL图像的X,Y导数.因此,如果我将对比度标准化并且我希望它生效,我应该再次计算所有内容.

有什么我不太懂的东西吗?

我应该规范细胞的价值吗?

HOG中的标准化无论如何都不是关于对比度,而是关于直方​​图值(每个箱中的细胞计数)?

链接到该论文:http: //lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf

Som*_*ing 13

通过对每个块的局部直方图进行归一化来实现对比度归一化.

整个HOG提取过程在这里得到了很好的解释:http://www.geocities.ws/talh_davidc/#cst_extract

当您对块直方图进行标准化时,如果直方图确实包含每个方向的幅度之和,则实际上会对此块中的对比度进行标准化.

术语"直方图"在这里令人困惑,因为您不计算有多少像素具有方向k,而是将这些像素的大小相加.因此,您可以在计算块的向量之后或甚至在计算整个向量之后对对比度进行标准化,假设您知道向量中的哪些索引开始一个块并且块结束.

由于我的理解,算法的步骤 - 95%的成功率为我工作:

  1. 定义以下参数(在此示例中,参数类似于人类检测纸张的HOG):

    • 像素大小(例如6x6)
    • 单元格中的块大小(例如3x3 ==>表示像素为18x18)
    • 块重叠率(例如50%==>意味着块宽度和块高度都必须是偶数.在此示例中满足,因为单元格宽度和单元格高度均匀(6个像素),使得块宽度和高度甚至)
    • 检测窗口大小.尺寸必须可以通过块大小的一半来分割而没有余数(因此可以将块精确地放置在50%重叠内).例如,块宽度为18像素,因此窗口宽度必须是9的乘法(例如9,18,27,36 ......).窗口高度相同.在我们的示例中,窗口宽度为63像素,窗口高度为126像素.
  2. 计算梯度:

    • 使用卷积与向量[-1 0 1]计算X差异
    • 使用卷积与上述矢量的转置计算Y差
    • 使用sqrt(diffX ^ 2 + diffY ^ 2)计算每个像素中的梯度幅度
    • 使用atan(diffY/diffX)计算每个像素中的渐变方向.请注意,atan将返回介于-9090之间的值,而您可能需要介于0180之间的值.因此,只需将所有负值翻转+180度即可.请注意,在HOG for Human Detection中,它们使用无符号方向(介于0和180之间).如果你想使用签名方向,你应该多做一点努力:如果diffX和diffY是正数,你的atan值将介于00之间. 90 - 保持原样.如果diffX和diffY为负,那么您将获得相同范围的可能值 - 此处,添加+180,因此方向将翻转到另一侧.如果diffX为正且diffY为负,您将获得介于-900之间的值- 保持相同(如果您希望它为正,则可以添加+360).如果diffY为正且diffX为负,则您将再次获得相同的范围,因此添加+180以将方向翻转到另一侧.
    • "宾"的指示.例如,9个无符号箱:0-20,20-40,......,160-180.您可以通过将每个值除以20来轻松实现这一目标并对结果进行分层.您的新分箱路线将介于08之间.
  3. 使用原始矩阵的副本分别对每个块执行操作(因为某些块是重叠的,我们不想破坏它们的数据):

    • 拆分为细胞
    • 对于每个单元格,创建一个包含9个成员的向量(每个单元一个).对于bin中的每个索引,设置具有该方向的所有像素的所有大小的总和.我们在一个单元格中有6x6像素.因此,例如,如果2个像素的方向为0而第一个的幅度为0.231且第二个的幅度为0.13,则应在向量中的索引0中写入值0.361(= 0.231 + 0.13).
    • 将块中所有单元的所有向量连接成一个大向量.此向量大小当然应为NUMBER_OF_BINS*NUMBER_OF_CELLS_IN_BLOCK.在我们的例子中,它是9*(3*3)= 81.
    • 现在,规范化这个向量.使用k = sqrt(v [0] ^ 2 + v [1] ^ 2 + ... + v [n] ^ 2 + eps ^ 2)(我使用eps = 1).在计算k之后,将向量中的每个值除以k - 因此您的向量将被标准化.
  4. 创建最终向量:

    • 将所有块的所有向量连接成1个大向量.在我的例子中,这个向量的大小是6318