【问题标题】:Block normalization of histogram of oriented gradient定向梯度直方图的块归一化
【发布时间】:2018-06-24 21:03:16
【问题描述】:

我是图像处理的初学者。我有一些关于 HOG 的问题。

https://www.learnopencv.com/histogram-of-oriented-gradients/

从这个网站上,它提到 HOG 描述符中的每个元素将除以块中所有元素的总和。但是,如果重叠块,如何进行块归一化?我不明白,因为向量中的某些元素将是多个块的元素。

Picture of block normalization

例如,如果我们有一个直方图 [v11 v12 v13 v14...v19] ,[v21 v22 v23 v24...v29], [v31 v32 v33 v34 v35...v39] 和 [v41 v42 v43 v44 ..v49] 在红色块中,我们可以像这样对第一个向量的第一个元素进行归一化:v11/(v11+v12+...+v21+v22+v23+..+v31+v32+...+v41+v42 ...+v49)

但是,如何对红色块和黄色块中的向量进行归一化呢?

非常感谢。

【问题讨论】:

  • 有什么问题?也许,你是否试图规范化每个块 in-place 并意识到这不适用于重叠块?只需将结果存储在每个块的 不同 向量中...否则,您能更好地解释您不理解的内容吗?
  • 是的,你规范化了块的副本。
  • 感谢您的回复。我已经编辑了我的问题。我希望它可以帮助。
  • 对于每个 8x8 像素块,您都有一个 9x1 向量;通过水平(然后垂直)一次步进 8 个像素,对于每个 16x16 块,您有四个 9x1 = 一个 36x1 向量; this 向量 = [v1,..,v36] 应该按照 L2 范数进行归一化,即 [v1/sqrt(v1^2+v2^2+...+v36^2), ...]
  • 重叠块怎么样?如果我们重叠块如何规范化它们?

标签: python c++ image-processing


【解决方案1】:

扩展@Massimiliano Janes 的评论:

假设你的直方图是

h1 = [v11, v12, v13, ..., v19],

h2 = [v21, v22, v23, ..., v29], 

h3 = [v31, v32, v33, ..., v39],

h4 = [v41, v42, v43, ..., v49] for the red block.

因此,要对红色块进行归一化,您需要除以所有元素 h1、h2、h3 和 h4 的总和。

sum = v11 + v12 + ... + v19 + v21 + ... + v49

现在,新的标准化直方图将是

h1_new = [v11/sum, v12/sum, ..., v19/sum]

h2_new = [v21/sum, v22/sum, ..., v29/sum]

h3_new = [v31/sum, v32/sum, ..., v39/sum]

h4_new = [v41/sum, v42/sum, ..., v49/sum]

但要对黄色块进行归一化,您仍然会使用红色块的两个单元格的原始直方图,即 h2 和 h4。

【讨论】:

  • 这里不清楚的是,将红色和黄色块归一化后,您将拥有h2_new_redh2_new_yellow;事实上,除了边缘的直方图之外,每个直方图都有 4 个标准化版本。如何合并这些?
猜你喜欢
  • 2011-08-01
  • 2017-12-10
  • 2013-06-22
  • 2015-01-21
  • 2013-11-08
  • 2011-11-30
  • 2012-07-15
  • 2018-11-03
相关资源
最近更新 更多