我已阅读一篇论文 ( Human activity recognition with metric learning ) 并尝试实现它。
作者使用 channel (剪影、光流),然后计算每个 channel 的直方图,如附图所示。
我计算了视频的轮廓和光流。但问题是,
1- 提到的直方图有什么意义?是否以合适的形式表示特征?
2-这个方法和HOG一样吗
3- 如何实现上述直方图?它只是划分边界框吗? .. 非常感谢。
抱歉给您带来不便
问候
最佳答案
我将尝试使用伪代码回答各种不同的问题。
1- 作者的最终目标似乎是获得他们正在跟踪 的窗口的描述符(我猜是跟踪,我还没有读过这篇论文)。因此,在计算轮廓之后 S
和 Fx
和 Fy
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/