【知识---图像特征提取算法--方向梯度直方图(Histogram of Oriented Gradients, HOG)原理、特点、应用场合及代码】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

图像特征提取是计算机视觉领域中的一个重要任务,它有助于将图像转换为可用于分析和识别的数值表示。

方向梯度直方图(Histogram of Oriented Gradients, HOG)是一种常见的图像特征提取算法,其具体的细节如下:


提示:以下是本篇文章正文内容,下面案例可供参考

方向梯度直方图(Histogram of Oriented Gradients, HOG)原理:

HOG是一种用于图像特征提取的技术,主要用于物体检测和图像识别。

其基本原理是通过计算图像中局部区域的梯度信息来描述图像的形状和纹理。

具体步骤包括:

梯度计算: 对图像进行梯度计算,得到图像中每个像素点的梯度幅值和梯度方向。

图像划分: 将图像划分为小的局部区域(cells)。

梯度直方图: 对每个局部区域内的梯度信息进行编码,得到局部区域内梯度方向的直方图。

块描述子: 将相邻的若干个局部区域的梯度直方图组合成块(blocks),得到块级别的描述子。

全局描述子: 将所有块级别的描述子串联起来,形成全局的HOG描述子。

最终,HOG描述子能够捕捉图像中的纹理、形状和边缘信息。

方向梯度直方图的特点:

对光照变化不敏感: HOG对图像的光照变化相对不敏感,因为它主要关注局部区域的梯度信息。
适用于多尺度: HOG可以在不同尺度上提取特征,从而适用于不同大小的目标。
较好的鲁棒性: HOG对于图像中的噪声和背景干扰有一定的鲁棒性。
适用于行人检测等任务: HOG在人体轮廓和纹理的提取上表现出色,因此在行人检测等任务中得到了广泛应用。

方向梯度直方图的不足:

对遮挡敏感: HOG对于目标的遮挡比较敏感,当目标被部分遮挡时,其性能可能下降。
无法处理形变: HOG无法处理目标的形变,因此在涉及变形较大的场景中可能不适用。
计算复杂度较高: HOG计算梯度和构建直方图的过程相对复杂,需要耗费较多计算资源。

方向梯度直方图的应用场合:

行人检测: HOG在行人检测中得到了广泛应用,其能够有效地捕捉行人轮廓和纹理信息。
目标识别: HOG可用于目标识别任务,例如车辆识别、物体识别等。
人脸检测: 在人脸检测中,HOG也被用作一种有效的特征提取方法。
图像分类: HOG可用于图像分类,尤其是涉及到纹理和形状信息的分类任务。

方向梯度直方图的代码示例:

以下是使用 scikit-image 库的示例代码,展示如何计算图像的HOG特征:

python 复制代码
from skimage import exposure
from skimage.feature import hog
import cv2
import matplotlib.pyplot as plt

# 读取图像
image_path = 'path/to/your/image.jpg'
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 计算HOG特征
features, hog_image = hog(image, visualize=True, block_norm='L2-Hys')

# 可视化原图和HOG特征图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6), sharex=True, sharey=True)

ax1.axis('off')
ax1.imshow(image, cmap=plt.cm.gray)
ax1.set_title('Input Image')

# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))

ax2.axis('off')
ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray)
ax2.set_title('HOG Features')
plt.show()

其中:

python 复制代码
skimage.feature.hog(image, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(3, 3), block_norm='L2-Hys', visualize=False, multichannel=None)

mage: 输入的灰度图像或多通道图像。

orientations: 梯度方向的数量,即每个细胞的方向直方图的柱数。通常选择9。

pixels_per_cell: 每个细胞的像素数,以元组形式表示。通常选择 (8, 8)。

cells_per_block: 每个块包含的细胞数,以元组形式表示。通常选择 (3, 3)。块的移动步长等于细胞的数量。

block_norm: 块内梯度归一化的方法。可选值包括:

'L1': 使用 L1 归一化。

'L1-sqrt': 使用 L1 归一化并取平方根。

'L2': 使用 L2 归一化。 'L2-Hys':

使用 L2 归一化,并进行截断(截断过高的梯度值)。

visualize: 是否返回可视化的 HOG 特征图。如果设置为 True,则返回 HOG 特征和可视化图像。

multichannel: 对于多通道图像,指定是否对每个通道单独计算 HOG 特征。如果为 None,则根据输入图像的维度自动选择。

该函数返回计算得到的 HOG 特征。如果设置了 visualize=True,则同时返回可视化的 HOG 特征图。


总结

在实际使用中,可以根据任务的要求调整这些参数,以获得更适合的特征表示。

相关推荐
天上的光23 分钟前
17.迁移学习
人工智能·机器学习·迁移学习
合作小小程序员小小店27 分钟前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
后台开发者Ethan30 分钟前
Python需要了解的一些知识
开发语言·人工智能·python
小米里的大麦31 分钟前
022 基础 IO —— 文件
linux
Xの哲學35 分钟前
Perf使用详解
linux·网络·网络协议·算法·架构
门前灯35 分钟前
Linux系统之iprconfig 命令详解
linux·运维·服务器·iprconfig
北京_宏哥39 分钟前
Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
前端·python·面试
想不明白的过度思考者1 小时前
数据结构(排序篇)——七大排序算法奇幻之旅:从扑克牌到百亿数据的魔法整理术
数据结构·算法·排序算法
猫头虎1 小时前
猫头虎AI分享|一款Coze、Dify类开源AI应用超级智能体快速构建工具:FastbuildAI
人工智能·开源·prompt·github·aigc·ai编程·ai-native
小七rrrrr1 小时前
动态规划法 - 53. 最大子数组和
java·算法·动态规划