我正致力于定向梯度直方图(HOG)功能,我正在尝试实现Dalal博士论文中描述的直方图箱的三线性插值。他解释了下面引用的插值过程:
编辑:粗略地说,HOG功能是从64x128像素窗口中提取的,该窗口被分成块。每个块由2x2个单元组成,单元为8x8像素区域。提取从计算图像的一阶导数开始,然后计算每个像素的方向和大小。计算每个8×8像素单元的块内的取向直方图,其中像素基于像素的取向对具有幅度值的直方图作出贡献,并且在取向和位置两者中在相邻的箱中心之间插值。直方图包含9个区间代表0-180度,步幅为20度。这里可以看到算法的总体描述:http://4.bp.blogspot.com/_7NBDeKCsVHg/TKBbldI8GmI/AAAAAAAAAG0/G-OXUz1ouPQ/s1600/a1.bmp
我们首先描述线性插值 在一维空间然后 将其扩展到3-D。设h是直方图 具有bin间距离(带宽)b。 h(x)表示的值 以x为中心的bin的直方图。 假设我们想要插入一个 重量w在点x进入 直方图。设x1和x2为二 最近的邻近垃圾箱 x使得x1≤x<1。 X2。线性 插值分配权重w 如下两个最近的邻居
让w在三维点x = [x,y,z] 是要插值的权重。让 x1和x2是两个角矢量 包含x的直方图立方体,其中 在每个分量中x1≤x<1。 X2。假设 直方图的带宽 沿x,y和z轴给出 b = [bx,by,bz]。三线 插值分配权重w 到周围的8个垃圾箱中心 如下:
我们计算单元格的直方图,并且每个像素对其直方图的幅度值有贡献。我从配方中理解的是,x和y表示检测窗口中细胞的位置,z是bin编号。在64x128检测窗口中,有8x16个单元格和9个方向区域,因此我们的直方图表示为h(8,16,9)。如果以上陈述是正确的,do(x1,y1)和(x2,y2)分别代表前一个和字母单元格? z1和z2是指前一个和字母方向的箱子吗?那么带宽b = [bx,by,bz]?
如果有人能澄清这些问题,我将非常感激。
感谢。
答案 0 :(得分:4)
将(x1,y1,z1)和(x2,y2,z2)视为跨越围绕要为其插值h的点(x,y,z)的立方体的两个点。 一组八个点(x1,y1,z1),(x2,y1,z1),(x1,y2,z1),(x1,y1,z2),(x2,y2,z1),(x2,y1, z2),(x1,y2,z2),(x2,y2,z2)形成完整的立方体。因此,(x1,y1,z1)和(x2,y2,z2)之间的三线性插值实际上意味着在您感兴趣的点周围的3D直方图空间中的8个点之间进行插值!现在回答你的问题:
(x1,y1),(x2,y2)(和(x1,y2)和(x2,y1)代表(x,y)平面中的区域中心。在你的情况下,这些将是方向向量。
正如你所说,z1和z2代表方向上的两个bin级别。结合图像平面中的四个点,这总共为您提供了8个箱。
带宽b = [bx,by,bz]基本上是x,y和z方向上相邻区间的中心之间的距离。在你的情况下,x方向有8个区,那个方向有64个像素,y方向有16个bin,y方向有128个像素:
bx = 8 pixels
by = 8 pixels
这留下了bz,我实际上需要更多的数据,因为我不知道你的渐变的整个范围(即从最低到最高的可能值),但如果该范围是rg
那么:
bz = rg/9
一般来说,任何方向的带宽都等于该方向的全部可用范围除以该方向的箱数。
有关使用图片的三线性插值的详细解释,请查看whoplisp's answer中的链接。
答案 1 :(得分:3)
让我们先来看看矩形HOG。图片分为几个图块,如第32页所示。 第46页显示了(f)中的R-HOG描述符。第49页解释了数据的分区方式。
我通过阅读Paul Burke的文章了解了如何进行3D插值:http://paulbourke.net/miscellaneous/interpolation/
抱歉,我必须生成自己的图片,以了解发生了什么。 这当然是一项有趣的技术。