1731 字
9 分钟
HOG与LBP:经典特征描述子
2026-06-28
无标签

SIFT 和 Harris 擅长检测角点和 Blob 等局部结构,HOG 和 LBP 则从另一个角度描述图像——前者用梯度方向分布刻画形状轮廓,后者用局部二值模式刻画纹理。两者在行人检测、人脸识别等经典任务中都有不可替代的位置。

方向梯度直方图(HOG)#

HOG(Histogram of Oriented Gradients)的核心假设是:局部目标的形状可以被梯度方向的分布所描述,而不需要精确知道边缘的位置。Dalal 和 Triggs 在 2005 年将其用于行人检测,提出的 HOG + SVM 框架在深度学习普及前长期占据行人检测的 state of the art。

算法流程#

1. 梯度计算#

与 Sobel 边缘检测相同,对整幅图像计算水平梯度 GxG_x 和垂直梯度 GyG_y,并得到每个像素的梯度幅值 M(x,y)M(x,y) 和方向 θ(x,y)\theta(x,y)。方向取值 00^\circ180180^\circ(无符号梯度,不区分正负方向),因为边缘的正面和反面在形状描述上没有区别。

2. 构建 Cell 直方图#

将图像划分为互不重叠的小方格(cell),通常为 8×88\times8 像素。对每个 cell 内的全部 64 个像素,将其梯度方向量化到 9 个 bin(每 2020^\circ 一个 bin),用梯度幅值加权投票。每个 bin 的值为该方向上的梯度强度之和。

投票时的幅值加权可以采用两种方式:

  • 直接累加:每个像素的梯度幅值累加到对应的方向 bin。
  • 三线性插值:当一个像素的梯度方向落在两个 bin 的分界线上时,按距离比例分配到相邻两个 bin。同时像素在 cell 内的空间位置也参与插值,减轻边界处的突变。

3. Block 归一化#

Cell 直方图直接受光照影响(光照越强,梯度幅值整体越大)。将相邻的 2×22\times2 个 cell 组成一个 block(即 16×1616\times16 像素),在 block 内对串联后的 4×9=364\times9=36 维特征向量做 L2-Norm 归一化:

vvv22+ε2\mathbf{v} \leftarrow \frac{\mathbf{v}}{\sqrt{\|\mathbf{v}\|_2^2 + \varepsilon^2}}

block 之间有重叠(通常步长为 1 个 cell),因此每个 cell 的直方图会参与多个 block 的归一化,最终被多次计入特征向量。重叠 block 是 HOG 性能的关键——它使每个 cell 的响应在局部范围内被平滑,减少 block 边界处的不连续性。

4. 特征向量拼接#

将所有 block 的归一化特征向量串联,得到一个数千维的 HOG 特征向量。以一张 64×12864\times128 的行人图像为例(经典参数):cell 步长 8×88\times8,block 大小 2×22\times2 cell,block 步长 11 个 cell,最终特征维度为 (7×15)×(4×9)=3780(7\times15)\times(4\times9)=3780 维。

HOG 与 SIFT 的关系#

HOG 的每个 cell 直方图与 SIFT 的描述子子区域本质上用了相同的技术——在局部小区域内统计梯度方向分布。区别在于 SIFT 的关键点检测(DoG)提供了尺度和旋转对齐,而 HOG 在密集网格上均匀采样,不关心关键点,适合形状轮廓稳定的目标(如行人、车辆)。

典型应用:行人检测#

HOG + SVM 的经典流程:对正样本(行人)和负样本(背景)提取 HOG 特征,训练线性 SVM 分类器。检测时在图像上滑动窗口,对每个窗口提取 HOG 特征并用 SVM 判断是否为行人。多尺度检测通过缩放图像金字塔实现。

:::tip HOG 关键参数

参数典型值影响
Cell 大小8×88\times8越小越精细,越大越鲁棒
Block 大小2×22\times2 cell影响光照归一化的范围
Block 步长1 个 cell步长越小重叠越多,特征越平滑
方向 bin 数9(00^\circ180180^\circbin 越多方向分辨率越高

:::

局部二值模式(LBP)#

LBP(Local Binary Pattern)用像素与其邻域的比较结果编码局部纹理,计算极快、对单调光照变化不敏感。

原始 LBP#

3×33\times3 邻域,以中心像素为阈值:邻域像素值大于等于中心,标记为 1,否则为 0。按顺时针顺序将这 8 个二进制位组成一个字节,得到 00255255 之间的 LBP 码。

数学表达:对中心像素 (xc,yc)(x_c, y_c) 及其 8 个邻域像素 ipi_pp=0,,7p=0,\dots,7),

LBP(xc,yc)=p=07s(ipic)2p,s(x)={1,x00,x<0\text{LBP}(x_c, y_c) = \sum_{p=0}^{7} s(i_p - i_c) \cdot 2^p,\quad s(x) = \begin{cases}1, & x \geq 0 \\ 0, & x < 0\end{cases}

每个 LBP 码对应一种局部纹理模式。计算全图所有像素的 LBP 码并统计直方图,就得到了一张图像的 LBP 纹理特征向量。

圆形 LBP 与多尺度#

原始 3×33\times3 的固定邻域覆盖范围太小。圆形 LBP 允许在半径为 RR 的圆上均匀采样 PP 个点,采样点的像素值用双线性插值获得。常用配置是 P=8,R=1P=8, R=1(覆盖 3×33\times3);P=16,R=2P=16, R=2(更大范围)。不同半径的组合可以捕捉不同尺度的纹理。

均匀模式(Uniform LBP)#

8 位二进制数有 256 种可能,但绝大多数模式在实际图像中几乎不出现。Ojala 等人发现,约 90% 的局部纹理属于”均匀模式”——二进制串中 0 和 1 之间发生跳变的次数不超过 2 次。例如 00011111(1 次跳变)、01110000(2 次跳变)。

均匀模式将 256 种原始模式压缩为 P(P1)+3P(P-1)+3 种(P=8P=8 时为 59 种),大幅降低了特征维度且提升了统计稳定性。

旋转不变 LBP#

图像旋转后,同一局部纹理的 LBP 码会发生循环移位。旋转不变 LBP 取所有循环移位中的最小值作为码值:

LBPP,Rri=min{ROR(LBPP,R,i)i=0,,P1}\text{LBP}_{P,R}^{ri} = \min\{\text{ROR}(\text{LBP}_{P,R}, i) \mid i = 0, \dots, P-1\}

其中 ROR\text{ROR} 表示循环右移 ii 位。旋转不变与均匀模式可以组合,得到 LBPP,Rriu2\text{LBP}_{P,R}^{riu2},进一步将维度降至 P+2P+2P=8P=8 时为 10 维)。

:::tip LBP 变体速查

变体维度(P=8)不变性说明
原始 LBP256光照单调不变完整 8bit 码
均匀模式 LBP59光照单调不变丢弃罕见模式,降维
旋转不变 LBP36+ 旋转不变取循环移位最小值
均匀+旋转不变10+ 旋转不变P+2P+2 维,极紧凑

:::

LBP 级联检测:Viola-Jones 框架#

LBP 在 OpenCV 中被用作 Viola-Jones 级联检测器的特征基础(与 Haar-like 特征等价使用)。用积分图加速 LBP 特征计算后,以 AdaBoost 选择最有效的特征并构建级联分类器,在实时人脸检测中广泛部署。

:::tip HOG vs LBP

维度HOGLBP
核心思想梯度方向分布描述形状二进制模式描述纹理
特征维度数千维数十到数百维
计算速度中等极快
光照鲁棒性依赖 block 归一化天然对单调光照不变
典型应用行人检测、车辆检测人脸检测、纹理分类
与 DL 的关系HOG 思想影响了很多 detection 网络(如 YOLO 的 grid)LBP 在早期人脸检测中地位重要,现在基本被 CNN 替代

:::

HOG与LBP:经典特征描述子
https://biscuit0613.github.io/posts/cv/cv-feature-hog-lbp/
作者
Biscuit
发布于
2026-06-28
许可协议
CC BY-NC-SA 4.0
图像分割:分水岭算法
梯度、边缘检测与图像锐化