1.介绍

HOG(Histogram of Oriented Gradient)2005CVPR会议上,法国国家计算机科学及自动控制研究所的Dalal等人提出的一种解决人体目标检测的图像描述子,该方法使用梯度方向直方图(Histogram of Oriented Gradients,简称HOG)特征来表达人体,提取人体的外形信息和运动信息,形成丰富的特征集。

2.生成过程

1)图像归一化
归一化图像的主要目的是提高检测器对光照的鲁棒性,因为实际的人体目标可能出现的各种不同的场合,检测器,必须对光照不太敏感才会有好的效果。
 
2)利用一阶微分计算图像梯度
图像平滑 
对于灰度图像,一般为了去除噪点,所以会先利用离散高斯平滑模板进行平滑:高斯函数在不同平滑的尺度下进行对灰度图像进行平滑操作,Dalal等实验表明在下,人体检测效果最佳(即不做高斯平滑),使得错误率缩小了约一倍。不做平滑操作,可能原因:图像时基于边缘的,平滑会降低边缘信息的对比度,从而减少图像中的信号信息。
梯度法求图像梯度
一阶微分处理一般对灰度阶梯有较强的响应  
一阶微分:

对于函数f(x,y),在其坐标(x,y)上的梯度是通过如下二维列向量定义的: 
这个向量的模值由下式给出:

因为模值的计算开销比较大,一般可以按如下公式近似求解:

Dalal等人利用许多一阶微分模板进行求梯度近似值,但在实验中表明模板[-1,0,1]效果最好。
采用模板[-1,0,1]为例计算图像梯度以及方向,通过梯度模板计算水平和垂直方向的梯度分别如下:

其中,分别表示该像素点的水平,垂直梯度值。计算该像素点的梯度值(梯度强度)以及梯度方向

对于梯度方向的范围限定,一般采用无符号的范围,故梯度方向可表示为:

3)基于梯度幅值的方向权重投影
HOG结构
通常使用的HOG结构大致有三种:矩形HOG(简称为R-HOG),圆形HOG和中心环绕HOG。它们的单位都是Block(即块)。Dalal的试验证明矩形HOG和圆形HOG的检测效果基本一致,而环绕形HOG效果相对差一些。
矩形HOG块的划分:
一般一个块(Block)都由若干单元(Cell)组成,一个单元都有如干个像素点组成。
在每个Cell中有独立做梯度方向统计,从而以梯度方向为横轴的的直方图,前面我们已经提到过,梯度方向可取0度到180度或0度~360度,但dalal实验表明,对于人体目标检测0度~180度这种忽略度数正负级的方向范围能够取得更好的结果。然后又将这个梯度分布平均分成 个方向角度(orientation bins),每个方向角度范围都会对应一个直方柱。
根据Dalal等人实验,在人体目标检测中,在无符号方向角度范围并将其平均分成9份(bins)能取得最好的效果,当bin的数目继续增大效果改变不明显,故一般在人体目标检测中使用bin数目为9范围0~180度的度量方式。
Block中各个参数的最终选取:
对于人体对象检测,块的大小为3×3个单元格,单元格的大小为6×6个象素时,检测效果是最好的,错误率约为10%左右。块的大小为2×2个单元格,单元格大小为8×8个象素时,也相差无几。6-8个象素宽的单元格,2-3个单元格宽的块,其错误率都在最低的一个平面上。块的尺寸太大时标准化的作用被削弱了从而导致错误率上升,而如果块的尺寸太小时,有用的信息反而会被过滤掉。
在实际应用中,在Block和Cell划分之后,对于得到各个像区域中,有时候还会为了进行一次高斯平滑,但是对于人体目标检测等问题,该步骤往往可以忽略,实际应用效果不大,估计在主要还是去除区域中噪点,因为梯度对于噪点相当敏感。
对梯度方向的投影权重方式的选取: 
对于梯度方向的加权投影,一般都采用一个权重投影函数,它可以是像素点的梯度幅值,梯度幅值的平方根或梯度幅值的平方,甚至可以使梯度幅值的省略形式,它们都能够一定程度上反应出像素上一定的边缘信息。根据Dalal等人论文的测试结果,采用梯度幅值量级本身得到的检测效果最佳,使用量级的平方根会轻微降低检测结果,而使用二值的边缘权值表示会严重降低效果(约为5%个单位10-4FPPW(False Positives Per Window))。
4)HOG特征向量归一化
对block块内的HOG特征向量进行归一化。对block块内特征向量的归一化主要是为了使特征向量空间对光照,阴影和边缘变化具有鲁棒性。还有归一化是针对每一个block进行的,一般采用的归一化函数有以下四种:

在人体检测系统中进行HOG计算时一般使用L2-norm,Dalal的文章也验证了对于人体检测系统使用L2-norm的时候效果最好。

5)得出HOG最终的特征向量

3.HOG的应用:
主要用在object detection 领域,特别是行人检测,智能交通系统,当然也有文章提到把HOG用在手势识别,人脸识别等方面。

4.HOG与SIFT区别
HOG和SIFT都属于描述子,以及由于在具体操作上有很多相似的步骤,所以致使很多人误认为HOG是SIFT的一种,其实两者在使用目的和具体处理细节上是有很大的区别的。HOG与SIFT的主要区别如下:
① SIFT是基于关键点特征向量的描述。
② HOG是将图像均匀的分成相邻的小块,然后在所有的小块内统计梯度直方图。
③ SIFT需要对图像尺度空间下对像素求极值点,而HOG中不需要。
④ SIFT一般有两大步骤,第一个步骤是对图像提取特征点,而HOG不会对图像提取特征点。
5.HOG的优点:
HOG表示的是边缘(梯度)的结构特征,因此可以描述局部的形状信息;
位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响;
采取在局部区域归一化直方图,可以部分抵消光照变化带来的影响。
由于一定程度忽略了光照颜色对图像造成的影响,使得图像所需要的表征数据的维度降低了。
而且由于它这种分块分单元的处理方法,也使得图像局部像素点之间的关系可以很好得到的表征。
 
6.HOG的缺点:
描述子生成过程冗长,导致速度慢,实时性差;
很难处理遮挡问题。
由于梯度的性质,该描述子对噪点相当敏感

梯度直方图(HOG,Histogram of Gradient)的更多相关文章

  1. 特征描述子(feature descriptor) —— HOG(方向梯度直方图)

    HOG(Histogram of Oriented Gradients),描述的是图像的局部特征,其命名也暗示了其计算方法,先计算图像中某一区域不同方向上梯度的值,然后累积计算频次,得到直方图,该直方 ...

  2. (转)梯度方向直方图HOG(Histograms of Oriented Gradients )

    HOG(Histograms of Oriented Gradients )梯度方向直方图 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视 ...

  3. 【翻译】HOG, Histogram of Oriented Gradients / 方向梯度直方图 介绍

    本文翻译自 SATYA MALLICK 的 "Histogram of Oriented Gradients" 原文链接: https://www.learnopencv.com/ ...

  4. Histogram of Oriented Gridients(HOG) 方向梯度直方图

    Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模式识别领域很常用的一种描述图像局部纹理的特征.这个特征名字起的也很直白,就是说先计算图片某一区域中不同 ...

  5. 【计算机视觉】Histogram of Oriented Gridients(HOG) 方向梯度直方图

    Histogram of Oriented Gridients(HOG) 方向梯度直方图 Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模式识别领域很 ...

  6. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  7. HOG特征(Histogram of Gradient)总结(转载)

    整理一下我个人觉得比较好的HOG博文 博文1:OpenCV HOGDescriptor: 参数与图解 http://blog.csdn.NET/raodotcong/article/details/6 ...

  8. 方向梯度直方图(HOG)和颜色直方图的一些比較

    近期在学习视频检索领域的镜头切割方面的知识,发现经常使用的方法是直方图的方法,所以才专门有时间来学习下.查看到这两种直方图的时候,感觉有点接近,好像又不同,放在这做个比較.大部分还是百科的内容,只是对 ...

  9. HOG特征(Histogram of Gradient)学习总结

    最近在做的项目有用到HOG+SVM这一方面的知识,参考相关论文和网上一些博文在此对HOG特征进行下总结. 参考资料: HOG的经典论文:Dalal N, Triggs B. Histograms of ...

随机推荐

  1. Flutter生成带图片的二维码

    现在的APP中经常需要用自己的信息生成一个二维码给别人扫,下面就介绍一下Flutter中怎么生成一个带图片的二维码. 需要用到的插件qr_flutter 首先在 pubspec.yaml 文件中添加以 ...

  2. JS -- Unexpected trailing comma

    Unexpected trailing comma 后面多了一个逗号

  3. 关于IC电源管脚去耦电容

    原文地址:https://mp.weixin.qq.com/s/0dAyTpAcQWXlYULqCeKgFA 每个集成电路(IC)都必须使用电容将各电源引脚连接到器件上的地,原因有二:防止噪声影响其本 ...

  4. mfc递归删除文件夹

    BOOL myDeleteDirectory(CString directory_path) //删除一个文件夹下的所有内容 { BOOL ret=TRUE; CFileFind finder; CS ...

  5. PAT 甲级 1029 Median (25 分)(思维题,找两个队列的中位数,没想到)*

    1029 Median (25 分)   Given an increasing sequence S of N integers, the median is the number at the m ...

  6. 详解用python实现简单的遗传算法

    详解用python实现简单的遗传算法 今天整理之前写的代码,发现在做数模期间写的用python实现的遗传算法,感觉还是挺有意思的,就拿出来分享一下. 首先遗传算法是一种优化算法,通过模拟基因的优胜劣汰 ...

  7. python 内置数据结构 字符串

    字符串 一个个字符组成的有序的序列,是字符的集合 使用单引号,双引号,三引号引住的字符序列 字符串是不可变对象 Python3起,字符串就是Unicode类型 字符串定义 初始化 s1 = 'stri ...

  8. Unity学习笔记_控制人物移动+摄像机跟随

    我想做的移动操作方式类似[流星蝴蝶剑].[龙之谷].[我的世界第三人称]的第三人称操作方式. 操作说明:W键会朝当前镜头方向前进,鼠标控制镜头旋转. 做前需知(先去稍微了解一下比较好): ①unity ...

  9. 机器学习笔记——k-近邻算法(一)简单代码

    一 import numpy as np ##初始化数据 T = [[3, 104, -1], [2, 100, -1], [1, 81, -1], [101, 10, 1], [99, 5, 1], ...

  10. 再jsp页面中使用kindeditor 的方法

    1.创建一个动态web工程 2.建立一个static库文件夹把CSS,JS样式放进去 3. 复制HTML代码到jsp页面中 4.在相对路径中加上一个"static/" 5.运行截图