HOG 特征提取算法(原理篇)

在计算机视觉中人们设计了很多算法来提取空间特征,并利用图像梯度信息来识别物体。

其中一种技术叫做 HOG,也即方向梯度直方图(Histogram of Oriented Gradient)。方向梯度直方图听着太高深了,我们先来讲一下这些术语。

直方图就是数据分布的一种图形表现,看起来有点像柱形图,其柱形有不同的高度,每个柱形代表一组处于一定值范围的数据。这些柱形也称为组(bins),柱形越高意味着某组数据越多。

以灰度图像为例,假设你想绘制出这张薄饼图的强度数据直方图。

我们知道像素值的范围在 0 到 255 之间,所以我们可以把这些值分成若干组。我要创建 32 个组,每组包含 8 个像素值,所以第一组范围是 0 到 7,然后 8 到 15 以此类推一直到 248 到 255。
要创建直方图,我们得来看看这张图里的各个像素值,将各像素值放到对应的组里。这张图的薄饼里有很多亮值,背景则很黑,所以直方图看起来是这样的。

在这个直方图里黑色像素明显堆积在一起,蓝色框标识的是背景的像素,这些像素都在这些低值范围里。明亮的像素也聚集在一起,基本上都在灰度值 200 左右,这肯定是薄饼的大部分像素值。
看完灰度值的直方图,我们来讲下一个术语“方向梯度”。
方向很简单,指的就是图像梯度的方向或朝向。我们已经了解怎么用 Sobel 算子来计算梯度幅值和方向了。把三个术语结合在一起,HOG 就是指一张有关图像梯度方向的直方图。首先 HOG 会接受一张图像,如这张薄饼图,然后计算每个像素的梯度幅值和方向。

这其中蕴含的信息可不少,所以 HOG 实际上会把这些像素分成若干个较大的正方形单元,单元大小通常是 8 乘 8 如果图片小一些单元也就小一些。如果是 8 乘 8 的单元那就有 64 个梯度值,HOG 会计算每个单元相同的梯度方向有多少,将这些梯度的幅值相加得到梯度强度。接着 HOG 会把所有方向数据放到直方图里,这个直方图有九组,也就是九个值范围。不过你可以建立更多组来进一步分类数据。

HOG 会对图像的每个单元进行同样的处理,这个方向梯度直方图实际上就是个特征向量。接下来我们要用这些 HOG 特征来训练分类器,思路就是对于物体相同但大小、方向不同的图像,我们可以利用相同的 HOG 特征模式来检测物体,而不管物体的位置和呈现方式。

后记

本文是 Udacity 计算机视觉纳米学位课程笔记,下一步实践篇将在 OpenCV 中实现 HOG 算法。

posted @ 2019-08-14 22:22  Alex777  阅读(12372)  评论(0编辑  收藏  举报