OpenCV3 C++实现HOG特征提取详解与步骤

12 下载量 193 浏览量 更新于2024-08-29 收藏 476KB PDF 举报
OpenCV 3中的C++ HOG特征提取方法是一种广泛应用在计算机视觉领域的重要技术,它基于Histograms of Oriented Gradients(梯度方向直方图)来识别图像中的目标。HOG最初由Dalal和Triggs在2005年的论文《Histograms of Oriented Gradients for Human Detection》中提出,特别适用于行人检测,因为它能有效捕捉物体的边缘信息并量化形状特征。 HOG特征提取过程包括以下几个步骤: 1. **Gamma归一化**:这是一种预处理步骤,通过调整图像的颜色分布,减少局部阴影和背景对特征提取的影响,使得图像在后续处理中更加均匀。 2. **计算梯度**:使用图像的差分算子计算水平和垂直方向上的梯度,得到每个像素点的梯度幅值和方向。这一步骤有助于突出图像的边缘和纹理信息。 3. **划分cell**:将图像划分为大小相同的、不重叠的cell,通常选择8x8像素的单元格,以便于局部特征的计算。每个cell的梯度信息会被转换为方向直方图,其中每个像素的梯度方向被分为0-180度或0-360度的9个bin(区间),并根据梯度幅值赋予权重。 4. **组合成block**:将相邻的cell组合成16x16像素的block,形成更大的特征区域。滑动窗口方法用来计算每个block的梯度方向直方图。 5. **梯度直方图归一化**:通过L2-norm、L1-norm、L1-sqrt等归一化方法,如L2-norm和L1-sqrt效果最佳,可以减少光照、阴影和边缘变化对特征向量的影响,提升特征的稳定性。 6. **收集HOG特征**:每个cell的HOG特征向量长度为9,因为每个cell有9个梯度方向bin。对于一个128x64的图像,如果使用8x8的cell和2x2的block,那么将生成15x7个检测窗口block,从而得到的HOG特征描述符具有较高的维度。 HOG特征提取在OpenCV中是一种强大的工具,它通过对图像局部梯度的统计分析,提供了一种相对鲁棒的方式来表达图像内容,广泛应用于目标检测、人脸识别等场景。通过理解并掌握这一过程,开发者能够更好地利用OpenCV实现各种复杂的计算机视觉任务。