openCV特征提取与检测(六)-- HOG特征检测算法

1.什么是HOG特征提取算法?

Hog,即方向梯度直方图
在这里插入图片描述
直方图就是数据分布的一种图形表现,类似于柱形图,每个柱形代表一组处于一定范围的数据。这些柱形也成为组(bins),柱形越高意味着某组数据越多

以下图灰度图像为例
在这里插入图片描述
像素值的范围在0-255之间,将这些值分为32组,每组包含8个像素值,所以第一组的范围是0-7,以此类推到248-255.

要创建直方图,就是将该途中的各个像素值,放到对应的组里。而上图中的薄饼有很多亮值,背景则很黑,因此直方图大致如下:
在这里插入图片描述
什么是方向梯度?
方向很简单,指的就是图像梯度的方向或朝向。Hog就是一张有关图像梯度方向的直方图。首先HOG会接受一张图像,然后计算每个像素的梯度幅度和方向
在这里插入图片描述
Hog会把这些像素分成若干个较大的正方形单元,单元通常是8X8,如果图片小一些,单元就响应小一些,8X8即有64个梯度值,HOG会计算每个单元相同方向的梯度有多少,将这些梯度的幅值相加得到梯度强度。并将所有方向数据放到直方图中。以下直方图有9组,也就是9个值范围。
在这里插入图片描述
HOG会对图像的每个单元进行同样的处理,这个方向梯度直方图实际上就是个特征向量。对于物体相同但大小,方向不同的图像,可以利用HOG特征模式来检测物体,而不
管物体的位置和呈现方式。

2.在openCV中如何实现HOG算法?

正如在 ORB 算法中看到的,我们可以使用图像中的关键点进行匹配,以检测图像中的对象。当想要检测具有许多一致的内部特性且不受背景影响的对象时,这些类型的算法非常有用。例如,这些算法在人脸检测中可以取得良好的效果,因为人脸有许多不受图像背景影响的一致的内部特征,例如眼睛、鼻子和嘴巴。然而,当试图进行更一般的对象识别时,例如图像中的行人检测时,这些类型的算法并不能很好地工作。原因是人们的内在特征不像脸那样一致,因为每个人的体型和风格都不同(见下图)。这意味着每个人都会有一套不同的内部特征,因此我们需要一些能够更全面地描述一个人的东西。
在这里插入图片描述

一种选择是尝试通过行人的轮廓来检测他们。通过图像的轮廓(边界)来检测物体是非常具有挑战性的,因为我们必须处理背景和前景之间的对比带来的困难。例如,假设想检测一个图像中的行人,她正走在一栋白色建筑前,穿着白色外套和黑色裤子。我们可以在下图中看到,由于图像的背景大多是白色,黑色裤子的对比度将非常高,但由于外套也是白色的,所以对比度将非常低。

在这种情况下,检测裤子的边缘是很容易的,但是检测外套的边缘是非常困难的。而这就是为什么需要 HOG 。即 定向梯度柱状图(Histograms of Oriented Gradients),它是由 Navneet Dalal 和 Bill Triggs 于 2005 年首次引入的。
在这里插入图片描述
Hog 算法的工作原理是创建图像中梯度方向分布的柱状图,然后以一种非常特殊的方式对其进行归一化。这种特殊的归一化使得Hog 能够有效地检测物体的边缘,即使在对比度很低的情况下也是如此。这些标准化的柱状图被放在一个特征向量(称为 HOG 描述符)中,可以用来训练机器学习算法,例如支持向量机(SVM),以根据图像中的边界(边)检测对象。由于它的巨大成功和可靠性,HOG 已成为计算机视觉中应用最广泛的目标检测算法之一。

2.1 HOG算法实现原理

1.给定特定对象的图像,设置一个覆盖图像中整个对象的检测窗口(感兴趣区域)

2.计算检测窗口中每个像素的梯度大小和方向

3.将检测窗口分成像素的连接单元格,所有单元格的大小相同。单元的大小是一个自由参数,通常选择它来匹配要检测的特征的比例。例如,在一个64X128像素的检测窗口中,6X8像素宽的方型单元适用于检测人体肢体

4.为每个单元创建一个柱形图,首先将每个单元中所有像素的渐变方向分组为特定数量的方向(角度)箱,然后将每个角度箱中渐变的渐变幅度相加(见下图)。柱状图中的箱数是一个自由参数,通常设置为9个角箱。

5.将相邻单元分组成块(见下图)。每个块中的单元格数是一个自由参数,所有块的大小都必须相同。每个块之间的距离(称为跨距)是一个自由参数,但它通常设置为块大小的一半,在这种情况下,将得到重叠块(见动图)。经验表明,该算法能更好地处理重叠块。

6.使用每个块中包含的单元格来规范化该块中的单元格柱状图(见下图)。如果有重叠的块,这意味着大多数单元格将针对不同的块进行规格化(见动图)。因此,同一个单元可能有几个不同的归一化。

7.将所有块中的所有标准化柱状图收集到一个称为 HOG 描述符的特征向量中。

8.使用从包含同一对象的许多图像中得到的 HOG 描述符训练机器学习算法,例如使用 SVM,以检测图像中的这些对象。例如,可以使用来自许多行人图像的 HOG 描述符来训练 SVM 以检测图像中的行人。训练通过使用包含目标的正例和不包含目标的负例完成。

9.一旦对支持向量机进行了训练,就使用滑动窗口方法来尝试检测和定位图像中的对象。检测图像中的对象需要找到图像中与 SVM 学习到的 HOG 模式相似的部分。
在这里插入图片描述
在这里插入图片描述

2.2.为什么HOG算法有效?

正如我们上面所了解的,HOG 通过在图像的局部区域中添加特定方向的梯度大小来创建柱状图,称为“cells”。通过这样做可以保证更强的梯度对它们各自的角度柱状图的大小贡献更大,同时最小化由噪声引起的弱梯度和随机定向梯度的影响。通过这种方式,柱状图告诉我们每个单元格的主要梯度方向。

现在考虑一个问题,由于局部照明的变化以及背景和前景之间的对比度,梯度方向的大小可以有很大的变化。

为了考虑背景-前景对比度的差异,HOG 算法尝试在局部检测边缘。为了做到这一点,它定义了称为块的单元格组,并使用该局部单元格组规范化柱状图。通过局部归一化,HOG 算法可以非常可靠地检测每个块中的边缘,这称为块归一化。

除了使用块规范化之外,HOG 算法还使用重叠块来提高其性能。通过使用重叠块,每个单元为最终的 HOG 描述符提供几个独立的组成部分,其中每个组成部分对应于一个针对不同块进行规范化的单元。这似乎是多余的,但是经验表明,通过对每个单元对不同的局部块进行多次规格化,HOG 算法的性能显著提高。

2.3.创建HOG描述符

OpenCV中有很多不同的特征提取算法,以下是其中一些常见的算法: 1. SIFT(尺度不变特征变换):SIFT是一种基于尺度空间的特征提取算法,它能够在不同的尺度空间上检测出关键点,并提取出描述符。SIFT算法主要用于图像匹配、目标跟踪和三维重建等领域。 2. SURF(加速稳健特征):SURF是一种基于SIFT算法的改进版,它使用了一些加速技术来提高计算速度。SURF算法在SIFT算法的基础上进行了优化,提高了算法的效率和稳健性。 3. ORB(旋转不变性二进制特征):ORB是一种基于FAST特征检测器和BRIEF描述符的特征提取算法,它具有旋转不变性和尺度不变性。ORB算法在实时性和准确性方面都表现出色,适用于移动设备和嵌入式系统等低功耗场景。 4. HOG(方向梯度直方图):HOG是一种基于图像梯度方向直方图的特征提取算法,它通常用于目标检测和行人识别等领域。HOG算法可以提取出图像中物体的形状和纹理信息,并且具有一定的旋转不变性。 5. LBP(局部二值模式):LBP是一种基于局部像素点的二值模式描述符,它可以用于图像分类、人脸识别和纹理分析等领域。LBP算法对图像的灰度值进行二值化处理,并统计局部像素点的特征,从而提取出图像的纹理信息。 以上是常见的几种特征提取算法,不同的算法适用于不同的场景和应用。在使用时需要根据实际需求选择合适的算法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值