SIFT 和 Harris 擅长检测角点和 Blob 等局部结构,HOG 和 LBP 则从另一个角度描述图像——前者用梯度方向分布刻画形状轮廓,后者用局部二值模式刻画纹理。两者在行人检测、人脸识别等经典任务中都有不可替代的位置。
方向梯度直方图(HOG)
HOG(Histogram of Oriented Gradients)的核心假设是:局部目标的形状可以被梯度方向的分布所描述,而不需要精确知道边缘的位置。Dalal 和 Triggs 在 2005 年将其用于行人检测,提出的 HOG + SVM 框架在深度学习普及前长期占据行人检测的 state of the art。
算法流程
1. 梯度计算
与 Sobel 边缘检测相同,对整幅图像计算水平梯度 和垂直梯度 ,并得到每个像素的梯度幅值 和方向 。方向取值 –(无符号梯度,不区分正负方向),因为边缘的正面和反面在形状描述上没有区别。
2. 构建 Cell 直方图
将图像划分为互不重叠的小方格(cell),通常为 像素。对每个 cell 内的全部 64 个像素,将其梯度方向量化到 9 个 bin(每 一个 bin),用梯度幅值加权投票。每个 bin 的值为该方向上的梯度强度之和。
投票时的幅值加权可以采用两种方式:
- 直接累加:每个像素的梯度幅值累加到对应的方向 bin。
- 三线性插值:当一个像素的梯度方向落在两个 bin 的分界线上时,按距离比例分配到相邻两个 bin。同时像素在 cell 内的空间位置也参与插值,减轻边界处的突变。
3. Block 归一化
Cell 直方图直接受光照影响(光照越强,梯度幅值整体越大)。将相邻的 个 cell 组成一个 block(即 像素),在 block 内对串联后的 维特征向量做 L2-Norm 归一化:
block 之间有重叠(通常步长为 1 个 cell),因此每个 cell 的直方图会参与多个 block 的归一化,最终被多次计入特征向量。重叠 block 是 HOG 性能的关键——它使每个 cell 的响应在局部范围内被平滑,减少 block 边界处的不连续性。
4. 特征向量拼接
将所有 block 的归一化特征向量串联,得到一个数千维的 HOG 特征向量。以一张 的行人图像为例(经典参数):cell 步长 ,block 大小 cell,block 步长 个 cell,最终特征维度为 维。
HOG 与 SIFT 的关系
HOG 的每个 cell 直方图与 SIFT 的描述子子区域本质上用了相同的技术——在局部小区域内统计梯度方向分布。区别在于 SIFT 的关键点检测(DoG)提供了尺度和旋转对齐,而 HOG 在密集网格上均匀采样,不关心关键点,适合形状轮廓稳定的目标(如行人、车辆)。
典型应用:行人检测
HOG + SVM 的经典流程:对正样本(行人)和负样本(背景)提取 HOG 特征,训练线性 SVM 分类器。检测时在图像上滑动窗口,对每个窗口提取 HOG 特征并用 SVM 判断是否为行人。多尺度检测通过缩放图像金字塔实现。
:::tip HOG 关键参数
| 参数 | 典型值 | 影响 |
|---|---|---|
| Cell 大小 | 越小越精细,越大越鲁棒 | |
| Block 大小 | cell | 影响光照归一化的范围 |
| Block 步长 | 1 个 cell | 步长越小重叠越多,特征越平滑 |
| 方向 bin 数 | 9(–) | bin 越多方向分辨率越高 |
:::
局部二值模式(LBP)
LBP(Local Binary Pattern)用像素与其邻域的比较结果编码局部纹理,计算极快、对单调光照变化不敏感。
原始 LBP
取 邻域,以中心像素为阈值:邻域像素值大于等于中心,标记为 1,否则为 0。按顺时针顺序将这 8 个二进制位组成一个字节,得到 – 之间的 LBP 码。
数学表达:对中心像素 及其 8 个邻域像素 (),
每个 LBP 码对应一种局部纹理模式。计算全图所有像素的 LBP 码并统计直方图,就得到了一张图像的 LBP 纹理特征向量。
圆形 LBP 与多尺度
原始 的固定邻域覆盖范围太小。圆形 LBP 允许在半径为 的圆上均匀采样 个点,采样点的像素值用双线性插值获得。常用配置是 (覆盖 );(更大范围)。不同半径的组合可以捕捉不同尺度的纹理。
均匀模式(Uniform LBP)
8 位二进制数有 256 种可能,但绝大多数模式在实际图像中几乎不出现。Ojala 等人发现,约 90% 的局部纹理属于”均匀模式”——二进制串中 0 和 1 之间发生跳变的次数不超过 2 次。例如 00011111(1 次跳变)、01110000(2 次跳变)。
均匀模式将 256 种原始模式压缩为 种( 时为 59 种),大幅降低了特征维度且提升了统计稳定性。
旋转不变 LBP
图像旋转后,同一局部纹理的 LBP 码会发生循环移位。旋转不变 LBP 取所有循环移位中的最小值作为码值:
其中 表示循环右移 位。旋转不变与均匀模式可以组合,得到 ,进一步将维度降至 ( 时为 10 维)。
:::tip LBP 变体速查
| 变体 | 维度(P=8) | 不变性 | 说明 |
|---|---|---|---|
| 原始 LBP | 256 | 光照单调不变 | 完整 8bit 码 |
| 均匀模式 LBP | 59 | 光照单调不变 | 丢弃罕见模式,降维 |
| 旋转不变 LBP | 36 | + 旋转不变 | 取循环移位最小值 |
| 均匀+旋转不变 | 10 | + 旋转不变 | 维,极紧凑 |
:::
LBP 级联检测:Viola-Jones 框架
LBP 在 OpenCV 中被用作 Viola-Jones 级联检测器的特征基础(与 Haar-like 特征等价使用)。用积分图加速 LBP 特征计算后,以 AdaBoost 选择最有效的特征并构建级联分类器,在实时人脸检测中广泛部署。
:::tip HOG vs LBP
| 维度 | HOG | LBP |
|---|---|---|
| 核心思想 | 梯度方向分布描述形状 | 二进制模式描述纹理 |
| 特征维度 | 数千维 | 数十到数百维 |
| 计算速度 | 中等 | 极快 |
| 光照鲁棒性 | 依赖 block 归一化 | 天然对单调光照不变 |
| 典型应用 | 行人检测、车辆检测 | 人脸检测、纹理分类 |
| 与 DL 的关系 | HOG 思想影响了很多 detection 网络(如 YOLO 的 grid) | LBP 在早期人脸检测中地位重要,现在基本被 CNN 替代 |
:::