简介
HoG(Histogram of Oriented Gradient),方向梯度直方图。HoG特征是一种特征描述符。它通过计算和统计图像局部区域的梯度方向直方图来描述特征。
HoG基于的底层原理是图像中局部目标的表象和形状(appearance and shape),能够用物体边缘的方向密度分布较好地描述出来。本质上就是对梯度信息的统计。
HoG特征描述符生成方法:将图像分割成一个个小的细胞单元(cell,比如6*6为一个cell),对每个cell计算个像素点的梯度或边缘的方向直方图,最后将这些直方图组合起来构成最终的HoG特征描述符。
HoG特征提取流程
图像灰度化
读取原始图片并转换为灰度图
Gamma校正调节图像对比度
首先将图像进行归一化处理,然后进行预补偿(使用gamma函数,本质就是第一个指数运算)。然后将归一化的图像像素值转回到0-255之间。具体opencv代码可以到“参考资料”的第一个链接中去看看。
进行Gamma校正可以调节图像对比度,降低图像局部的阴影和光照变化造成的影响。
下面三张图,最左边是原图,中间是gamma值为1/2.2校正的图,右边是gamma值为2.2校正的图
计算每个像素的梯度
(x,y)处像素的x方向和y方向上的梯度计算方法:
(x,y)处像素的梯度幅值和方向分别为:
图像划分为cell
每个cell的大小一样,比如6*6个像素为一个cell。将图像划分为多个cell。
需要注意的是,cell可以是矩形的,也可以 是放射状的(radial)。
统计每个cell的梯度直方图
对每个cell内的像素点的梯度幅值和方向进行统计,得到该cell的梯度直方图。一般来说,将直方图划分为9个bin。
原作者在论文中提到梯度方向为无符号且通道数为9时(9 bins),检测效果最好。“无符号”梯度(unsigned gradient)指的是bins平均分布在0-180度之间,每个bin是20度。“无符号”梯度方式中,梯度方向以及它旋转180度之后的方向被认为是一样的,以下图为例:
上图中200-220度的像素会被统计到块里去。
另外,“有符号”梯度(“signed” gradient)则是指bins平均分布在0-360度之间,假设仍然是9个bins,那么每个bin是40度。
对每个cell内的所有像素,根据其梯度幅值和方向统计到不同的bin中。前面提到的bin是按照角度(梯度方向)划分的,那么梯度的幅值又起到什么作用呢?在实际计算中,梯度幅值是用来做权重分配用的。
如上图所示,对于第一个像素(蓝圈标注),它的梯度方向值是80,我们将它的梯度幅值2放到80度对应的bin里。
接下来看第四个像素(红圈标注),它的梯度方向值是10,这里由于0到10的距离,和10到20的距离是相等的。因此这个像素的梯度幅值4会均分为两个2分别加到0和20度对应的bin里。
因此,幅值是会根据具体的梯度方向到相邻两个bin的距离进行加权分配的。
还有一个比较特殊的地方是,如果角度大于160度时,计算距离权重的bins为0和180度这两个bins。比如对于165度,梯度幅值的分配比例为(180 - 165) / (165-160),为3:1,因此幅值的3/4(63.75)分配到了160这个bin,幅值的1/4(23.25)分配到了0这个bin
遍历完cell中所有像素后,就能拿到这个cell对应的梯度直方图了。
梯度直方图归一化
局部图像的曝光度,以及前景背景之间的对比度经常会存在变化很大的情况,这会导致局部梯度变化也很大。梯度直方图归一化能够进一步对光照、阴影和边缘进行压缩,对于检测结果来说有很重要的作用。
HOG的图像分割策略,一般来说有overlap和non-overlap两种。overlap指的是分割出的区块(patch)互相交叠,有重合的区域。non-overlap指的是区块不交叠,没有重合的区域。overlap方式计算量大,但有效利用了相邻像素信息。non-overlap计算量小,但有时会将连续的物体分割开,得到不太好的HoG特征。下面以overlap方式来说明。
首先,将多个cell组成更大的块block。这里以2x2个cell作为一个block。以这个block大小为单位进行滑动,滑动方向是从左到右,从上到下。
如上图,block滑动的顺序是红、蓝、黄、粉、绿...。一个block有4个cell,每个cell包含9维特征向量,因此每个block将4个cell的特征向量串联起来后,总共有4x9=36维特征向量。
接下来就对block进行直方图归一化处理。
对于一个三维向量(9,12,36),它的长度为:(L2范数)。将向量的每一个元素除以39,就得到了这个三维向量的归一化向量(0.231,0.308,0.923)。
对于一个block来说,我们可以将其看做36x1的向量,用同样的方法进行归一化就得到了最终的结果。
HoG特征收集
遍历所有的block,将block的归一化直方图结果串联起来得到最终的特征向量描述符。
假设图像大小为对于128*64的图像,cell大小为8*8,2*2个cell组成一个block。
因此block大小为16*16,每个像素有9个梯度方向,则每个block内有 9*2*2=36维。
block的滑动步长为8像素,则水平方向有128/8 -1 = 15个扫描窗口,垂直方向有64/8 -1 = 7个扫描窗口,总共有 36 * 15 * 7 = 3780个特征。
HoG特征的优缺点
优点:
HoG可以描述局部的形状信息。
量化了位置和方向,一定成都上可以减小平移和旋转带来的影响。
采用局部区域归一化直方图,可以减少部分光照变化带来的影响。
缺点:
描述符维数较高,生成速度较慢。
对噪声敏感。
参考资料
手写HOG_gamma归一化_Lyttonkeepgoing的博客-CSDN博客为了减少光照因素的影响,降低图像局部的阴影和光照变化所造成的影响,我们首先采用Gamma校正法对输入图像的颜色空间进行标准化(或者说是归一化)。所谓的Gamma校正可以理解为提高图像中偏暗或者偏亮部分的图像对比效果,能够有效地降低图像局部的阴影和光照变化。##作者在他的博士论文里有提到,对于涉及大量的类内颜色变化,如猫,狗和马等动物,没标准化的RGB图效果更好,而牛,羊的图做gamma颜色校正后效果更好。 是否用gamma校正得分析具体的训练集情况。举一个非常简单的例子对于85这个像素点 他的梯度赋值为 G_gamma归一化https://blog.csdn.net/m0_53292725/article/details/127069091
Gamma校正原理及实现-腾讯云开发者社区-腾讯云gamma校正原理: 假设图像中有一个像素,值是 200 ,那么对这个像素进行校正必须执行如下步骤: 1. 归一化 :将像素值转换为 0 ~ 1 之间的实数。 算法如下 : ( i + 0. 5)/256 这里包含 1 个除法和 1 个加法操作。对于像素 A 而言 , 其对应的归一化值为 0. 783203 。 https://cloud.tencent.com/developer/article/2097984
http://vision.stanford.edu/teaching/cs231b_spring1213/papers/CVPR05_DalalTriggs.pdfhttp://vision.stanford.edu/teaching/cs231b_spring1213/papers/CVPR05_DalalTriggs.pdfHistogram of Oriented Gradients explained using OpenCVHistogram of Oriented Gradients (HOG) is a feature descriptor, used for object detection. Read the blog to learn the theory behind it and how it works.https://learnopencv.com/histogram-of-oriented-gradients/目标检测的图像特征提取之(一)HOG特征_输出hog特征向量文件_zouxy09的博客-CSDN博客目标检测的图像特征提取之(一)HOG特征zouxy09@qq.com1、HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的_输出hog特征向量文件https://blog.csdn.net/zouxy09/article/details/7929348
特征提取——HOG方向梯直方图_直方图特征提取步骤_勉旃的博客-CSDN博客1、简介 HOG(Histogram of Oriented Gridients的简写)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。 2、检测步骤 HOG特征检测算法的几个步_直方图特征提取步骤https://blog.csdn.net/yushupan/article/details/78994754