HOG:用于人体检测的方向梯度直方图
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:用于人体检测的方向梯度直方图相关推荐
- python 方向梯度直方图_手动绘制方向梯度直方图(HOG)
HOG(Histogram of Oriented Gradients)--方向梯度直方图,是一种表示图像特征量的方法,特征量是表示图像的状态等的向量集合. 在图像识别(图像是什么)和检测(物体在图像 ...
- CVPR2005【行人检测】HOG+SVM用于人体检测的梯度方向直方图
目录 CVPR2005-用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection 使用的数据集 研究方法 数据 流程 双对 ...
- 【计算机视觉】方向梯度直方图(Histogram of Oriented Gradient,HOG)
文章目录 1. HOG 简述 2. HOG 工作流程 第一步.对图像的颜色空间进行归一化 第二步.计算每个像素点的梯度 第三步.为每个单元构建梯度方向直方图 第四步.块内梯度直方图归一化 3. 举个例 ...
- 图像特征:方向梯度直方图 HOG
文章目录 参考资料 简介 算法流程 灰度化和gamma校正 计算梯度 统计cell的梯度方向直方图 Block 块内归一化(重点) 组合为HOG特征 HOG特征与可视化 OpenCV 算法实现 参考资 ...
- 图像特征提取算法:方向梯度直方图HOG
1.基本介绍 HOG,全称是方向梯度直方图(Histogram Of Gradient),是目前计算机视觉.模式识别领域很常用的一种描述图像局部纹理的特征.这个特征名字起的也很直白,就是说先计算图片某 ...
- Histogram of Oriented Gridients(HOG) 方向梯度直方图
from: Histogram of Oriented Gridients(HOG) 方向梯度直方图 Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模 ...
- 方向梯度直方图(HOG)和颜色直方图的一些比較
近期在学习视频检索领域的镜头切割方面的知识,发现经常使用的方法是直方图的方法,所以才专门有时间来学习下.查看到这两种直方图的时候,感觉有点接近,好像又不同,放在这做个比較.大部分还是百科的内容,只是对 ...
- 手动绘制方向梯度直方图(HOG)
HOG(Histogram of Oriented Gradients)--方向梯度直方图,是一种表示图像特征量的方法,特征量是表示图像的状态等的向量集合. 在图像识别(图像是什么)和检测(物体在图像 ...
- 深度学习----CNN的图像学习之HOG(方向梯度直方图)详解
一.原理 二.参数的理解 2.1.灰度值 2.2.归一化 2.3.细胞 2.4.窗口 2.5.类型 2.6.Gamma标准化 2.7.图像梯度及梯度算子 2.8.直方图 2.9.高斯空域加窗 三.步骤 ...
最新文章
- chrome浏览器下“多余”的2px
- 【Python项目实战】提取.docx文件中的图片并保存到指定的文件夹
- Tomcat源码调试环境搭建
- Bootstrap CustomBox 弹层
- Sql Server 查询语句
- 常见语法错误:sizeof和strlen strlen获取指针指向的数组长度
- 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),...
- 如何在IOS平台上使用js直接调用OC方法
- H3CSE园区-NTP
- [渝粤教育] 长安大学 液压传动 参考 资料
- dd 命令用来测试硬盘及网络带宽读写速度
- learn python the hard way中文pdf_Learn Python 3 the Hard Way .pdf
- 织梦dedecms 内容管理系统模板标签代码参考
- 金山wps的面试经历
- 塞尔之光的树心旋转机关_塞尔之光攻略心得_塞尔之光怎么创建人物 塞尔之光角色创建方法详解-公共游戏资源网...
- gocron mysql_[日常] gocron源码阅读-使用go mod管理依赖源码启动gocron
- mysql 42000 1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er
- 【总结】最全面的Python面试知识!
- Python:统计大小写字母个数和数字个数
- EasyDSS视频直播点播平台无法播放4K视频的原因排查与解决
热门文章
- 南京工业大学计算机科学与技术学院怎么样,南京工业大学浦江学院怎么样
- 一阶系统开环传递函数表达式_我理解的现代控制系统 第4部分-开环与闭环系统的区别...
- 高德 ip定位 android,IP定位-API文档-开发指南-Web服务 API | 高德地图API
- JAVA解析pdf文件
- 创建红黑树解决实际问题
- tensorflow学习笔记(3)------北京大学 曹健
- nbu备份db2数据库6号错误解决案例
- 应用概率统计(陈魁)第八章部分课后答案
- 让DNS服务器支持泛域名解析(转)
- 手写Spring-第十四章-再次进化!用注解完成属性的注入