1. 论文简介

论文名:Histograms of Oriented Gradients for Human Detection

论文地址 :HOG

论文作者:Navneet Dalal and Bill Triggs

论文时间:2015年

说明:

HOG (Histogram of oriented gradient)是2005年CVPR上,由法国国家计算机科学及自动控制研究所的Dalal等人提出的一种用于人体检测的方向梯度直方图(特征描述子),通过统计图像局部区域的梯度方向直方图来形成图像特征,再结合SVM分类器来实现人体检测。HOG对几何和光学形变具有较好的鲁棒性。

特征描述子可以说是图像的表示方式,通过抽取图像中的有用信息,丢弃图像中的额外信息从而简化图像的表示。通常情况下,特征描述子可以将一张3通道的彩色图片转化为一个特征向量。

在HOG特征描述子中,梯度方向的分布,也就是梯度方向的直方图被当做特征。通常来说,图像中边缘、拐角的梯度幅值会比较大,也会包含更多的关于目标形状的相关信息。

2.HOG方法基本流程

原论文中给出的完整的流程

使用HOG方式获取特征的流程

2.1 检测窗口

作者在论文中指出,检测窗口大小为:64x128(后续出现的图像主要都是指这个检测,除了图像预处理阶段的图像指的是原图),会包含人体四周大约16个像素点,实验显示,16是一个比较合适的数字,太大或者太小都会影响最终检测结果。

2.2 图像预处理

这一步其实是对图片做一些预处理操作:对图像进行裁剪,缩放到固定大小。

作者在论文中指出,他们使用了不同色彩空间(灰度图、RGB、LAB)的图片,并进行了伽马矫正,但是效果并不明显,因此颜色和伽马校正可做可不做。可能是因为后续也进行了normalization,从而有差不多的效果。

关于伽马校正:可以调节图像对比度,减少光照对图像的影响(包括光照不均和局部阴影),使过曝或者欠曝的图像恢复正常,更接近人眼看到的图像。

2.2 计算梯度

对于灰度图,计算每个像素点的梯度;对于彩色图像,计算每个通道的梯度,取梯度值最大的作为该像素的梯度。

作者在论文总提到,他们设计了不同的filter(论文中也称为derivative mask)加上Gaussian平滑来获取每个像素点的梯度,发现最简单的filter效果最好。

这些不同的filter或者模板有:[-1,1],[-1,0,1],[1,-8,0,8,1],sobel,

其中,[-1,0,1]的最终效果最好。

于是可以使用  和  分别计算每个像素点的水平梯度(x方向)和垂直梯度(y方向)。

然后,再计算每一个像素点梯度的幅值和方向:

对于每一个像素点来说,梯度都有大小和方向。x方向梯度会强化垂直边缘特征,y方向梯度图会强化水平边缘特征。这就使得有用的特征(轮廓)得到保留,无关不重要的信息被去除。

2.3 计算每个cell的梯度方向加权累积得到直方图

首先,把图像划分为多个8x8的cell,并计算每个cell的梯度直方图。(这个cell的尺寸也可以是其他值,根据具体的特征而定。)

一个8 x 8的cell,在计算梯度后,会得到8 x 8 x 2=128个值,其中,64个梯度幅值,64个梯度方向值(角度大小)。值的数量还是比较大的(尤其一张图片有多个cell),现在将它转换为划分了9个bin的梯度直方图这一特征,使得特征的表达会更紧凑,也使得当前特征的鲁棒性更高。(一个像素点的梯度信息可能包含造成,一个cell的梯度信息会更稳定。)

关于cell的大小:HOG用来做人形检测,8x8的cell大小对于从64x128的图片中抽取一些重要特征已经是足够了。如果用来检测其他目标,那cell的大小可以根据需要调整。

接下来,来看一下具体的操作:

以上图片为例,左边为一张包含了人的图像,大小为64x128,已经划分了多个8x8的cell;中间图为其中一个8x8的cell,每个像素点都绘制了梯度,箭头为方向,长度为幅值;右上图为该cell的梯度幅值,右下图为该cell的梯度方向值。

此处注意,梯度角度的取值范围为0°~180°,作者在论文中提到,0°~180°(“无符号”梯度)的效果比0°~360°的效果更好。此时,两个相反的方向被认为是相同的,也就是说,若计算出来的梯度方向是270°,那实际上用90°表示。

然后,将180°分成9个bin,每20°为一个bin,这个可以认为是横轴,我们要做的就是将这8x8大小的cell中的像素梯度值根据角度分到这9个组中并累加起来,这就是纵轴,这里会使用双线性插值的方式将梯度幅值分到相邻两个bin中,最后的直方图则是由这9个值组成。

继续以上图为例,

图中蓝圈所在的像素,梯度方向为80°,梯度幅值为2,在直方图80°所在的bin就累加2;红圈所在的像素,梯度方向为10°,在0°和20°之间,梯度幅值为4,那么这个梯度值就会按比例累加到0°和20°所在的bin,所以直方图中,0°所在的bin和20°所在的bin各累加了2。

还有一点需要注意,如果某个像素的梯度方向在160°和180°之间,那么这个像素的梯度幅值会按比例累加到0°和160°所在的bin中。

将这 8x8 的cell中所有像素的梯度幅值都累加到各自角度所在的bin中后,就形成了如下直方图。

可以看到,直方图中0°和180°所在bin有比较大的权重,说明大多数像素点的梯度向上或者向下,也就是说这个cell大概率是个横向边缘。

那么现在,我们就可以用这个梯度直方图(9个值)来代替原先的8x8x2个值。

2.4 对每个block中的cell的梯度直方图进行归一化

到此,已经对每个cell都创建了一个直方图。

HOG方法中,作者进一步选取2x2大小的窗口将2×2个cell作为一组,称为block。我们已经知道,每个cell会产生9个值,2×2个cell则会产生36个值。然后将这个2x2大小的窗口在图像上滑动得到不同的有重叠(overlapping)的block。

因为图像的梯度对光照比较敏感,例如,可以将图片的像素值除以2,此时图片会变得更暗,梯度幅值也会变成原来的一半,直方图中的值也将变成原来的一半。而我们希望特征描述子不会受到光照的影响,于是就需要将直方图进行“归一化”。也就是,将每个block中的4个cell的值拼接在一起得到36个值,然后再进行归一化。作者验证了不同的归一化方法的效果,发现L2-Hys、L2-Norm、L1-sqrt效果差不多,L1-Norm效果有降低。

以L2-Norm为例:采用来做归一化,也就是,首先计算这36个值的平方和,然后用36个值分别处以这个结果。避免分母为0。

经过归一化的这些block就称为HOG特征描述子。

2.5 将检测窗口中所有block的HOG特征拼接得到最终的特征向量

每次滑动,一个block就会得到一个包含36个值的特征向量。在检测窗口大小为64x128的情况下,横向有8个cell,纵向有16个cell,每个block包含2x2=4的cell,每次滑动的stride=1cell,那么横向有7个block,纵向有15个block,一共有7x15=105个block。

最后将这105个block合并,就得到了整个检测窗口的特征描述,长度为36x105=3780。

3.分类

最后,作者使用SVM来做分类。

参考:

Histogram of Oriented Gradients explained using OpenCV (learnopencv.com)

HOG:用于人体检测的方向梯度直方图相关推荐

  1. python 方向梯度直方图_手动绘制方向梯度直方图(HOG)

    HOG(Histogram of Oriented Gradients)--方向梯度直方图,是一种表示图像特征量的方法,特征量是表示图像的状态等的向量集合. 在图像识别(图像是什么)和检测(物体在图像 ...

  2. CVPR2005【行人检测】HOG+SVM用于人体检测的梯度方向直方图

    目录 CVPR2005-用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection 使用的数据集 研究方法 数据 流程 双对 ...

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

    文章目录 1. HOG 简述 2. HOG 工作流程 第一步.对图像的颜色空间进行归一化 第二步.计算每个像素点的梯度 第三步.为每个单元构建梯度方向直方图 第四步.块内梯度直方图归一化 3. 举个例 ...

  4. 图像特征:方向梯度直方图 HOG

    文章目录 参考资料 简介 算法流程 灰度化和gamma校正 计算梯度 统计cell的梯度方向直方图 Block 块内归一化(重点) 组合为HOG特征 HOG特征与可视化 OpenCV 算法实现 参考资 ...

  5. 图像特征提取算法:方向梯度直方图HOG

    1.基本介绍 HOG,全称是方向梯度直方图(Histogram Of Gradient),是目前计算机视觉.模式识别领域很常用的一种描述图像局部纹理的特征.这个特征名字起的也很直白,就是说先计算图片某 ...

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

    from: Histogram of Oriented Gridients(HOG) 方向梯度直方图 Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模 ...

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

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

  8. 手动绘制方向梯度直方图(HOG)

    HOG(Histogram of Oriented Gradients)--方向梯度直方图,是一种表示图像特征量的方法,特征量是表示图像的状态等的向量集合. 在图像识别(图像是什么)和检测(物体在图像 ...

  9. 深度学习----CNN的图像学习之HOG(方向梯度直方图)详解

    一.原理 二.参数的理解 2.1.灰度值 2.2.归一化 2.3.细胞 2.4.窗口 2.5.类型 2.6.Gamma标准化 2.7.图像梯度及梯度算子 2.8.直方图 2.9.高斯空域加窗 三.步骤 ...

最新文章

  1. chrome浏览器下“多余”的2px
  2. 【Python项目实战】提取.docx文件中的图片并保存到指定的文件夹
  3. Tomcat源码调试环境搭建
  4. Bootstrap CustomBox 弹层
  5. Sql Server 查询语句
  6. 常见语法错误:sizeof和strlen strlen获取指针指向的数组长度
  7. 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),...
  8. 如何在IOS平台上使用js直接调用OC方法
  9. H3CSE园区-NTP
  10. [渝粤教育] 长安大学 液压传动 参考 资料
  11. dd 命令用来测试硬盘及网络带宽读写速度
  12. learn python the hard way中文pdf_Learn Python 3 the Hard Way .pdf
  13. 织梦dedecms 内容管理系统模板标签代码参考
  14. 金山wps的面试经历
  15. 塞尔之光的树心旋转机关_塞尔之光攻略心得_塞尔之光怎么创建人物 塞尔之光角色创建方法详解-公共游戏资源网...
  16. gocron mysql_[日常] gocron源码阅读-使用go mod管理依赖源码启动gocron
  17. mysql 42000 1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er
  18. 【总结】最全面的Python面试知识!
  19. Python:统计大小写字母个数和数字个数
  20. EasyDSS视频直播点播平台无法播放4K视频的原因排查与解决

热门文章

  1. 南京工业大学计算机科学与技术学院怎么样,南京工业大学浦江学院怎么样
  2. 一阶系统开环传递函数表达式_我理解的现代控制系统 第4部分-开环与闭环系统的区别...
  3. 高德 ip定位 android,IP定位-API文档-开发指南-Web服务 API | 高德地图API
  4. JAVA解析pdf文件
  5. 创建红黑树解决实际问题
  6. tensorflow学习笔记(3)------北京大学 曹健
  7. nbu备份db2数据库6号错误解决案例
  8. 应用概率统计(陈魁)第八章部分课后答案
  9. 让DNS服务器支持泛域名解析(转)
  10. 手写Spring-第十四章-再次进化!用注解完成属性的注入