【知识---图像特征提取算法--方向梯度直方图(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 特征图。


总结

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

相关推荐
董厂长20 分钟前
langchain :记忆组件混淆概念澄清 & 创建Conversational ReAct后显示指定 记忆组件
人工智能·深度学习·langchain·llm
亿牛云爬虫专家1 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
牧以南歌〆3 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
董董灿是个攻城狮3 小时前
5分钟搞懂什么是窗口注意力?
算法
Dann Hiroaki3 小时前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
G皮T4 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
九年义务漏网鲨鱼4 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间4 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享4 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
夜月yeyue4 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件