Python实现HOG特征提取:从图像到梯度直方图
版权申诉
82 浏览量
更新于2024-08-25
收藏 589KB PDF 举报
"这篇文档是关于使用Python实现方向梯度直方图(Histogram of Oriented Gradients, HOG)的实战教程,主要来源于CSDN平台。文档详细介绍了如何通过OpenCV库处理图像,计算梯度,以及进行HOG特征提取的步骤。"
在计算机视觉领域,方向梯度直方图(HOG)是一种用于对象检测的强大特征描述符。HOG通过捕捉图像局部区域内的边缘和形状信息来识别和定位目标物体。下面是基于Python和OpenCV实现HOG的详细过程:
1. **读取图片**
使用`cv2.imread()`函数读取图像,可以设置参数0以读取灰度图像。`img2`是对原始图像进行归一化的版本,将像素值缩放到0到1之间,而`img1`保持原图像的8位整数格式。`image`则由`color.rgb2gray()`函数将彩色图像转换为灰度图像。
2. **计算梯度**
- **x方向梯度**:使用`cv2.Sobel()`函数计算x方向的梯度。该函数接受输入图像、数据类型(在这里为`cv2.CV_32F`,即32位浮点数)、x方向的差分阶数(1表示向前一像素求导)和y方向的差分阶数(0表示仅计算x方向的梯度),以及可选的卷积核大小(在这里为1x1)。
- **y方向梯度**:同样使用`cv2.Sobel()`函数计算y方向的梯度,但这次改变y方向的差分阶数为1。
3. **计算合梯度的幅值和方向**
使用`cv2.cartToPolar()`函数将x和y梯度转换为极坐标形式,得到梯度的幅值(magnitude)和方向(angle)。`angleInDegrees=True`参数表示返回的角度以度为单位。
4. **可视化**
文档中的这部分代码用于展示各个步骤的结果,包括原始图像、x方向梯度图、y方向梯度图等,以便于理解图像处理的过程。`plt.figure(figsize=(30,30))`创建了一个宽30,高30的图像,`add_subplot()`函数添加了子图,并用`axis('off')`关闭了坐标轴显示。
5. **HOG特征提取**
虽然这部分代码没有展示完整的HOG特征提取,但在实际应用中,接下来的步骤通常会涉及:
- **细胞单元格(Cell)划分**:将图像划分为小的单元格。
- **块(Block)与重叠**:多个相邻的单元格组成一个块,块之间可能有重叠。
- **梯度直方图**:在每个单元格内,根据梯度方向创建直方图。
- **归一化**:对块内的直方图进行局部归一化,以减少光照变化的影响。
- **形成特征向量**:组合所有块的直方图形成最终的HOG特征向量。
HOG特征在行人检测、车辆检测等应用场景中表现出色,但其计算复杂度较高,对于大规模图像处理可能会较慢。随着深度学习的发展,虽然HOG已不再是主流的特征提取方法,但它依然是理解和学习计算机视觉原理的重要工具。
2022-01-14 上传
2020-12-21 上传
2020-03-02 上传
2021-09-30 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
一诺网络技术
- 粉丝: 0
- 资源: 2万+
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码