介绍
在机器学习算法的世界里,特征工程是非常重要的。实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方。
世界上一些顶级数据科学家依靠特征工程来提高他们在竞赛排行榜得分。我相信你甚至会在结构化数据上使用各种特征工程技术。
我们可以将此技术扩展到非结构化数据(例如图像)吗?对于计算机视觉爱好者来说,这是一个有趣的问题,我们将在本文中解决这个问题。准备好对图像数据进行特征提取形式的特征工程吧!
在本文中,我将向你介绍一种流行的图像特征提取技术——方向梯度直方图(Histogram of Oriented Gradients),或俗称的HOG。我们将了解什么是HOG特征描述子,它是如何工作的(算法背后的完整数学原理),最后,用Python实现它。
目录
- 什么是特征描述子?
- HOG特征描述子简介
- HOG的计算过程
- 预处理数据
- 计算梯度
- 计算幅值和方向
- 使用梯度和方向创建直方图的方法
- HOG的计算过程
- 计算梯度直方图
- 标准化梯度
- 一幅完整图像的特征
- 在Python中实现HOG特征描述子
什么是特征描述子?
你可能在阅读标题时就已经遇到了这个问题。所以,在我们跳进文章的HOG部分之前,首先要清楚这一点。
看看下面显示的两个图像。你能分辨出图像中的物体吗?
我们可以清楚地看到这里的右图有狗,左图有车。现在,让我让这项任务稍微复杂一点,分辨下图所示的对象:
还是挺容易的。你能猜出第一种和第二种情况之间有什么区别吗?第一对图像有很多信息,比如物体的形状,颜色,边缘,背景等。
另一方面,第二对信息少得多(只有形状和边缘),但它仍然足以区分这两个图像。
你知道我想说什么吗?在第二种情况下,我们还是很容易区分对象,因为它具有识别对象所需的必要信息。这正是特征描述子的作用:
它是图像的简化表示,仅包含有关图像的最重要信息。
以下是一些最受欢迎的的特征描述子。
- HOG:方向梯度直方图
- SIFT:尺度不变的特征变换
- SURF:加速稳健特征
在本文中,我们将重点关注HOG特征描述子及其工作原理。让我们开始吧!
HOG特征描述子简介
HOG(Histogram of Oriented Gradients)是一种特征描述子,通常用于从图像数据中提取特征。它广泛用于计算机视觉任务的物体检测。
让我们看一下HOG的一些重要方面,它们与其他特征描述子不同:
- HOG描述符关注对象的结构或形状。现在你可能会问,这和我们为图像提取的边缘特征有什么不同?在边缘特征的情况下,我们只识别像素是否是边缘。HOG还能够提供边缘方向。这是通过提取边缘的梯度和方向(或者你可以说大小和方向)来实现的
- 此外,这些方向是在“局部”进行部分计算的。这意味着整个图像被分割成更小