在目标检测过程中,我们通常会在待检测图像上滑动一个检测窗口,对窗口内的图像区域提取HOG特征向量。然后将这个特征向量输入到已经训练好的分类器中,分类器会根据特征向量判断该窗口内是否包含目标对象(如行人、车辆等),以及目标对象的类别。通过在图像的不同位置和不同尺度上重复这个过程,就能在图像中定位并识别出目标对象。
在机器学习中,分类器需要通过大量的样本数据来学习如何区分不同的类别。HOG特征向量就是这些样本数据的一种有效表示形式。比如在行人检测任务中,我们用很多包含行人的图像和不包含行人的图像来训练分类器。这些图像经过HOG特征提取后,就变成了一个个特征向量。分类器通过学习这些特征向量与对应类别(行人或非行人)之间的关系,就能掌握如何根据特征向量来判断新的图像是否包含行人。
HOG特征提取从图像中提取人工视觉特征的原理主要基于图像的梯度信息统计,通过以下步骤实现:
- 图像预处理
灰度化处理:将彩色图像转换为灰度图像,以消除颜色信息的干扰,使特征提取更加专注于图像的形状和纹理信息。
伽马校正(可选):对输入图像进行伽马校正,目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰。 - 计算梯度
梯度幅值和方向计算:使用Sobel算子或其他梯度算子计算图像中每个像素点的梯度幅值和梯度方向。梯度幅值表示图像亮度变化的强度,梯度方向表示亮度变化的方向。 - 划分细胞单元并统计直方图
细胞单元划分:根据预设的细胞单元大小(如8x8像素),将图像划分为多个细胞单元。
直方图统计:在每个细胞单元内,将梯度方向量化为预设的直方图bin(通常为9个或18个bin),每个bin代表一个特定的方向范围。将每个像素的梯度幅值累加到相应的方向区间中,得到每个细胞单元的梯度方向直方图。
通俗来说,直方图统计就像是在细胞单元里给梯度方向“分类计数”。
假设一个细胞单元有64个像素(8x8像素),我们把梯度方向分成9个“桶”(bin),每个桶代表一个方向范围,比如第一个桶代表0°-20°的方向,第二个桶代表20°-40°的方向,以此类推。
然后,我们看细胞单元里每个像素的梯度方向和幅值。比如某个像素的梯度方向是30°,幅值是5,那我们就把这5累加到第二个桶里;另一个像素梯度方向是150°,幅值是3,就往第八个桶里累加3。就这样,把细胞单元里所有像素的梯度幅值按照方向分到对应的桶里。
最后,这9个桶里的数值就组成了这个细胞单元的梯度方向直方图,它反映了细胞单元内不同方向梯度的分布情况,就像统计了不同方向“梯度力量”的大小一样。
- 划分块并归一化
块划分:将相邻的细胞单元组合成块,例如采用2x2的细胞单元组合方式。块的大小和步长可以根据具体应用进行调整。
归一化处理:对每个块内的所有细胞单元的梯度方向直方图进行归一化处理,以减少光照和对比度变化的影响。归一化方法通常采用L2范数或L1范数。
每个归一化后的块直方图都包含了一组数值,这些数值反映了该块内图像梯度方向的分布情况。
把所有这些块的归一化直方图数值按照一定的顺序(通常是图像的扫描顺序,从左到右、从上到下)依次排列起来,就像把一串串珠子连成一条长项链一样,就形成了最终的HOG特征向量。这个向量包含了图像中各个局部区域(即各个块)的梯度信息。
- 构建最终的HOG特征向量
特征向量构建:将所有块的归一化后的直方图串联起来,形成最终的HOG特征向量。这个特征向量可以用于后续的分类器训练和目标检测。
HOG特征向量就像是一个长长的“特征编码”,它把图像中的关键信息进行了高度浓缩和编码,方便计算机理解和处理。
- 窗口滑动(可选)
窗口滑动:在图像上滑动一个固定大小的窗口,对于窗口内的每个块,计算梯度直方图并将其作为特征向量。这有助于捕获图像中不同区域的局部信息,提高特征的鲁棒性。