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

5 下载量 180 浏览量 更新于2024-09-01 收藏 476KB PDF 举报
本文档主要介绍了OpenCV 3版本下使用C++进行HOG(Histograms of Oriented Gradients,梯度方向直方图)特征提取的方法。HOG是一种用于计算机视觉中的目标检测技术,它通过量化图像局部区域的梯度方向和大小信息,实现对物体形状和纹理的描述,尤其适用于行人检测等领域。 首先,文章强调了Gamma归一化步骤,这是为了减少图像中局部阴影和背景因素对特征提取的影响,确保特征的鲁棒性。通过对图像的颜色进行非线性变换,使得图像在强度上更加均匀。 接下来,计算梯度是HOG特征提取的核心环节。通过水平和垂直方向的差分操作,获取每个像素点的梯度幅值和方向。这些梯度信息被分配到预定义的区间(0-180度或0-360度,取决于是否考虑方向)的9个bins中,每个bin的权重由该像素的梯度幅值决定。 划分cell后,将相邻的细胞(通常是8x8像素大小)组成16x16像素的block,通过滑动窗口的方式逐个计算每个block的梯度方向直方图。不同大小的cell和block对最终特征提取的效果有着显著影响,较大的cell和block有助于捕捉更大的空间结构,但可能会损失细节信息。 在直方图统计阶段,归一化是一个关键步骤。作者比较了L2-norm、L1-norm和L1-sqrt等归一化方法,结果显示L2-norm和L1-sqrt效果较好,而L1-norm虽然简单但性能略逊。归一化有助于消除光照、阴影和边缘带来的差异,提高特征的稳定性。 最后,每个cell的梯度方向信息转换成一个9维的HOG特征向量,具体长度取决于cell和block的大小。对于一个128x64的图像,如果使用8x8像素的cell和2x2cell组成的block,那么特征向量长度将是9。 本文提供了OpenCV 3中C++实现HOG特征提取的详细步骤,包括预处理、梯度计算、cell和block的划分、直方图统计以及归一化处理,这对于理解和使用HOG算法进行目标检测和识别具有很高的实用价值。