Python实现HOG特征提取:从图像到梯度直方图
版权申诉
6 浏览量
更新于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 上传
2023-08-09 上传
2023-05-26 上传
2023-04-05 上传
2023-04-05 上传
2023-09-07 上传
2023-09-05 上传
2023-05-17 上传
一诺网络技术
- 粉丝: 0
- 资源: 2万+
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析