点击 Lena 图选择一个 8×8 cell,或用方向键移动;当前页面只追踪当前 cell 的梯度幅值、方向 bin、直方图和 block 归一化证据。
原图按 8×8 像素划分为 32×32 个 cell。点击原图可选择一个 cell。
31×31 blocks × 2×2 cells/block × 9 bins
当直接把检测窗口的原始灰度交给分类器时,窗口大小或亮度一变化,向量就失去可比性;我们需要把窗口里的边缘结构抽成稳定描述。
常用办法是把窗口分成若干 ,在每个 cell 里按梯度方向投票得到直方图,再把相邻 cell 拼成 。这样生成的固定长度向量保留物体轮廓,又对光照变化不那么敏感。
拖动窗口到不同位置,对比 cell 直方图和 block 归一化前后的变化;注意梯度方向在哪里投票变多,以及 block 大小改变时哪些区域被合并。
原图第 65-72 行, 第 65-72 列。
目标检测不能只记住原始像素值。光照、颜色和纹理一变,同一个物体的像素会明显变化; 但物体的轮廓、边缘走向和局部形状通常更稳定。 HOG 把一个图像窗口转换成“边缘方向分布向量”,让后续分类器读取这条向量来判断窗口里是否有目标。
选中 cell (8, 8),先对其中每个像素计算 Sobel 梯度, 再按方向 bin 累加梯度幅值,最后把所属 block 内的 cell 直方图串联并归一化。
当前页面为教学演示,采用硬投票(每个像素只投入最近的一个方向 bin)和固定左上角 block 策略; 标准 HOG 还会对相邻 bin 做线性插值、使用 L2-Hys 归一化,并让 block 以 stride 滑动重叠。
代表像素选取当前 cell 内梯度幅值最大的像素,便于观察方向投票如何发生。
从当前 Lena 选区看,红框 cell 负责统计一个小区域的边缘方向;灰框 block 负责把相邻 cell 合成更稳定的小向量; 整个检测窗口再把所有 block 向量接成一条长描述子。分类器读取的是这条描述子,而不是直接读取原始像素。
cell (8, 8) 内的每个像素先计算梯度, 再投票到 9 个方向柱中,形成当前这张方向直方图。
灰框 block 覆盖 2×2 个 cell,把这些直方图串联后归一化, 得到长度为 36 的 block 向量。
当前窗口共有 961 个 block,全部按扫描顺序拼接后, 得到 34,596 维窗口描述子,作为分类器输入。