news 2026/2/25 18:35:41

计算机视觉中的方向梯度直方图(HOG)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机视觉中的方向梯度直方图(HOG)

原文:towardsdatascience.com/histogram-of-oriented-gradients-hog-in-computer-vision-a2ec66f6e671

简介

方向梯度直方图最初由 Navneet Dalal 和 Bill Trigs 在他们 CVPR 论文[“方向梯度直方图用于人类检测”]中提出。

根据它关注的特征类型,如纹理、颜色或形状,以及它描述的是整个图像还是局部信息,有许多不同的特征提取算法。

HOG 算法是特征提取中最基本的技术之一,因为它是对象检测和识别任务的基础步骤。

在本文中,我们将探讨 HOG 算法的原理和实现。


什么是方向梯度直方图(HOG)?

HOG 是一种全局描述符(特征提取)方法,应用于图像中的每个像素,以提取邻域信息(像素的邻域)如纹理,并将从给定图像中压缩/抽象这些信息到一个称为特征向量的简化/浓缩向量形式,该向量可以描述此图像的特征,这在捕捉图像中的边缘和梯度结构时非常有用。此外,我们可以比较处理后的图像以进行对象识别或对象检测。

HOG 解释

1- 计算梯度图像

为了提取和捕获边缘信息,我们应用由两个小矩阵(滤波器/核)组成的 Sobel 算子,这些矩阵测量灰度中的强度差异( wherever there is a sharp change in intensity)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/bd8fb2856cf031b46bb320c3ff6e99bb.png

作者创作

我们通过卷积将此核应用于图像的像素:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/34d57e5fa6c3297d9c99f05bfbc8dcb6.png

我们使用 3×3 核/滤波器(Sobel 算子)在图像上滑动,逐元素相乘,并将输出相加。(作者创作)

在对图像应用 Sobel 核之后,我们可以计算图像的幅度和方向:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1a88d20b2eddf73927fd55f1df39c2fd.png

梯度幅度。(作者创作)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1aadf6517d4aa49eff14ef25f4eea60d.png

梯度方向。(作者创作)

梯度确定了特定点的边缘强度(幅度)和方向(方向)。边缘方向与梯度向量在该点计算位置的方向垂直。换句话说,向量的长度和方向。

2- 计算梯度直方图

对于每个像素,我们有两个值:幅度和方向。为了将此信息组合成有意义的东西,我们使用直方图,这有助于有效地组织和解释这些值。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/dd4db3efb6b467b121a490227b9631ec.png

learnopencv.com/histogram-of-oriented-gradients/,由作者编辑。

我们在这些单元格(8×8)中创建梯度直方图,这些单元格有 64 个值分布在直方图的桶中,每个桶量化为 9 个桶,每个桶为 20 度(跨越 0°到 180°)。每个像素的幅度值(边缘强度)被添加为对应方向的“投票”,以便直方图的峰值揭示了像素的主导方向。

3-归一化

由于梯度幅度取决于光照条件,归一化将直方图缩放以减少光照和对比度变化的影响。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/23adac6f4e90263794c513e3316ebd5d.png

learnopencv.com/histogram-of-oriented-gradients/,由作者编辑。

每个块通常由一个网格状的单元格(2×2)组成。这个块在图像上滑动时会有重叠,意味着每个单元格都包含在多个块中。每个块有 4 个直方图(4 个单元格),这些直方图可以连接起来形成一个 4(单元格)x 9(桶)x 1 的向量=每个块 36 x 1 元素向量;示例中的整体图像:7 行 x 15 列=7x15x36=3780 个元素。这个特征向量被称为HOG 描述符,生成的向量被用作分类算法(如 SVM)的输入。

# we will be using the hog descriptor from skimage since it has visualization tools available for this exampleimportcv2importmatplotlib.pyplotaspltfromskimageimportcolor,feature,exposure# Load the imageimg=cv2.imread('The path of the image ..')# Convert the original image to RGBimg_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# Convert the original image to gray scaleimg_gray=cv2.cvtColor(img_rgb,cv2.COLOR_RGB2GRAY)plt.imshow(img_gray,cmap="gray")# These are the usual main parameters to tune in the HOG algorithm.(H,Himage)=feature.hog(img_gray,orientations=9,pixels_per_cell=(8,8),cells_per_block=(2,2),visualize=True)Himage=exposure.rescale_intensity(Himage,out_range=(0,255))Himage=Himage.astype("uint8")fig=plt.figure(figsize=(15,12),dpi=80)plt.imshow(Himage)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d22443a22954f1963f67b28fe070fba8.png

莫娜丽莎图片由(WikiImages 用户 wikiimages-1897/)提供)pixabay.com/

如您所见,HOG 有效地捕捉了人脸的一般形状(眼睛、鼻子、头部)和手。这是由于 HOG 专注于图像中的梯度信息,使其在检测线条和形状方面非常有效。此外,我们还可以观察到图像中每个点的占主导地位的梯度和它们的强度。

(HOG)图像中人体检测算法

HOG 是计算机视觉中流行的特征描述符,特别适用于检测形状和轮廓,例如人体形状。此代码利用 OpenCV 内置的 HOG 描述符和专门训练用于检测人体的预训练支持向量机(SVM)模型。

# Load the imageimg=cv2.imread('The path of the image ..')# Convert the original image to RGBimg_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# Convert the original image to gray scaleimg_gray=cv2.cvtColor(img_rgb,cv2.COLOR_RGB2GRAY)#Initialize the HOG descriptor and set the default SVM detector for peoplehog=cv2.HOGDescriptor()hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())# Detect people in the image using the HOG descriptorbbox,weights=hog.detectMultiScale(img_gray,winStride=(2,2),padding=(10,10),scale=1.02)# Draw bounding boxes around detected peoplefor(x,y,w,h)inbbox:cv2.rectangle(img_rgb,(x,y),(x+w,y+h),(255,0,0),4)plt.imshow(img_rgb)

在加载测试图像后,我们使用 HOG 的 detectMultiScale 方法来检测人物,winStride 设置为每步跳过一个像素,通过牺牲一点精度来提高速度,这在目标检测中至关重要,因为这是一个计算密集型过程。尽管检测器可能识别出所有人,但有时会出现误报,即一个人的身体部分被检测为另一个人。为了解决这个问题,我们可以应用非极大值抑制(NMS)来消除重叠的边界框,尽管不良的配置(winStride、填充、缩放)有时会偶尔无法检测到对象。

总结

总结 HOG 描述符的计算涉及几个步骤:

  1. 梯度计算

  2. 姿态分箱

    1. 描述符块

    2. 归一化

    3. 特征向量形成 在这篇文章中,我们探讨了 HOG 背后的数学原理以及如何通过 OpenCV 在几行代码中轻松应用,这要归功于 OpenCV!希望您觉得这个指南有用,并且喜欢通过这些概念进行工作。感谢阅读,我们下次再见!

参考文献

  • L. Daudet, B. Izrar, 和 R. Motreff, 用于人类检测的定向梯度直方图,2010,HAL 开放科学。

  • Satya Mallick, 图像识别和目标检测:第一部分,2016,学习 OpenCV。

  • Satya Mallick, 使用 OpenCV 解释的定向梯度直方图,2016,学习 OpenCV

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 5:03:47

Kotaemon歌词写作辅助:押韵与主题匹配

Kotaemon歌词写作辅助:押韵与主题匹配 在音乐创作的世界里,一句恰到好处的歌词往往能击中人心。但对许多创作者而言,如何让文字既贴合情感、又押韵自然,还保持主题连贯,始终是一道难题。灵感或许不可控,但工…

作者头像 李华
网站建设 2026/2/25 13:03:59

Kotaemon能否检测知识冲突并提示审核?

Kotaemon能否检测知识冲突并提示审核? 在企业级AI应用日益深入的今天,一个看似简单却极为关键的问题正不断浮现:当多个知识源对同一事实给出不同答案时,系统还能否保持可信?比如,一份文档说“某药品推荐剂量…

作者头像 李华
网站建设 2026/2/20 6:27:42

21、利用 Silverlight 为 SharePoint 创建增强用户体验

利用 Silverlight 为 SharePoint 创建增强用户体验 1. 技术融合的应用机遇 Silverlight 与 SharePoint 这两种技术融合后,应用开发的机会十分诱人。可以构建以下几种类型的应用: - 简单自包含应用 :代码存在于 Silverlight 应用中,不与 SharePoint 对象模型集成,Shar…

作者头像 李华
网站建设 2026/2/21 6:16:30

基于Kotaemon的智能招聘助手开发全过程

基于Kotaemon的智能招聘助手开发全过程 在企业人力资源部门每天被“工作地点在哪”“试用期多久”“什么时候出面试结果”这类重复问题淹没的今天,自动化招聘服务早已不是锦上添花的功能,而是提升效率、优化候选人体验的关键突破口。然而,市面…

作者头像 李华
网站建设 2026/2/24 17:18:13

.NET周刊【11月第4期 2025-11-23】

国内文章.net 行不行?在线客服系统成功支持客户双11大促,21客服在线,高峰超300会话并发https://www.cnblogs.com/sheng_chao/p/19242279作者分享了他开发的升讯威客服系统的真实使用案例,描述了系统在双11大促中的表现。通过技术分…

作者头像 李华