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


总结

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

相关推荐
风象南4 小时前
我把大脑开源给了AI
人工智能·后端
Johny_Zhao6 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
飞哥数智坊6 小时前
我帮你读《一人公司(OPC)发展研究》
人工智能
董董灿是个攻城狮7 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
冬奇Lab9 小时前
OpenClaw 源码精读(3):Agent 执行引擎——AI 如何「思考」并与真实世界交互?
人工智能·aigc
没事勤琢磨11 小时前
如何让 OpenClaw 控制使用浏览器:让 AI 像真人一样操控你的浏览器
人工智能
用户51914958484511 小时前
CrushFTP 认证绕过漏洞利用工具 (CVE-2024-4040)
人工智能·aigc
牛马摆渡人52812 小时前
OpenClaw实战--Day1: 本地化
人工智能
前端小豆12 小时前
玩转 OpenClaw:打造你的私有 AI 助手网关
人工智能
BugShare12 小时前
写一个你自己的Agent Skills
人工智能·程序员