algorithm - 如何计算轮廓的直方图?

标签 algorithm image-processing histogram descriptor

我已阅读一篇论文 ( Human activity recognition with metric learning ) 并尝试实现它。

作者使用 channel (剪影、光流),然后计算每个 channel 的直方图,如附图所示。

我计算了视频的轮廓和光流。但问题是,

1- 提到的直方图有什么意义?是否以合适的形式表示特征?

2-这个方法和HOG一样吗

3- 如何实现上述直方图?它只是划分边界框吗? .. 非常感谢。

抱歉给您带来不便

问候

最佳答案

我将尝试使用伪代码回答各种不同的问题。

1- 作者的最终目标似乎是获得他们正在跟踪 的窗口的描述符(我猜是跟踪,我还没有读过这篇论文)。因此,在计算轮廓之后 SFxFy channel ,作者有一个窗口 MxMx3 , 3 个 channel 通过附加 [S, Fx, Fy] .这不是表示窗口的非常合适的形式,因为 (1) 维数非常高( MxMx3 可能有变量 M ),(2) 不是尺度或方向不变的,并且 (3) 它不是稳健的描述符。作者只是使用直方图方法(类似于HoG中的方法但不相同)来转换MxMx3。 channel 到 216 维描述符( MxMx3 -> 216 ,不管 M )。

2- 上面的回答。不是HoG,而是类似于HoG、SIFT等特征提取方法。

3- 如果我没有理解错(仅凭那一点点信息),只需将边界框划分为 2x2 网格(4 个正方形/子窗口)。对于每个子窗口,将其分成 18 个 20 度的切片(这不是直截了当的,但知道像素相对于子窗口中心的位置,您可以计算角度,因此,其中的饼图切片它掉下来了。

然后,有像素 p属于子窗口(i,j) (与 0 <= i,j < 2 )和饼图切片 k ,将其值(在每个 channel 中)添加到直方图:

hist(i, j, k, c) += data(p, c)

哪里c是 channel (3 个 channel [S, Fy, Fx] )和 data(p, c)是像素 p 处的 3 channel 数据和 channel c .

你最终会得到一个 2x2x18x3 = 216描述符。你提供的摘录没有提到任何关于规范化该描述符的内容,但我想如果它什么也没说,那就是:

hist(i, j, k, c) /= sum(abs(flatten(hist)))

或者可能分别标准化每个子窗口和 channel (如在 hog 中执行的那样):

hist(i, j, k, c) /= sum(abs(hist(i, j, :, c)) # summing over the 3rd axis `k`

关于algorithm - 如何计算轮廓的直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859081/

相关文章:

c - 对角带中的遍历矩阵

java - Batik - 将 SVG 置于图像之上

java - 哪种类型的 Jfreechart 更适合 Histograms?

matlab - 如何创建直方图的直方图?

java - 如何在水平直方图上打印数字?

ruby - 在 Ruby 中最快实现随机数生成器?

java - 如何实现动态选择?

java - 截断字符串并消除重复项的算法(不区分大小写)

python - 如何在灰度图像上应用渐变贴图

math - 颜色之间的相似性