机器视觉 Histogram of oriented gradients
Histogram of oriented gradients 简称 HoG, 是计算机视觉和图像处理领域一种非常重要的特征,被广泛地应用于物体检测,人脸检测,人脸表情检测等。
HoG 最早是在2005 年的CVPR 上由 Navneet Dalal 和 Bill Triggs 提出来的。HoG 的算法很简单,对于物体的特征表示却非常有效。简单而高效,这大概也是其从被提出来之后,就被CV界广泛使用的原因所在。
下面简单介绍一下HoG 的算法:
首先是计算梯度:
我们知道图像上一点,在水平方向和垂直方向都存在梯度,假设其水平方向上的梯度为 Gx, 垂直方向上的梯度为 Gy, 我们可以从下面的表达式计算其梯度:
对于图像来说,我们可以构造两个滤波器 [−1,0,1], [−1,0,1]T, 让这两个滤波器对图像分别在水平方向和垂直方向做卷积,就可以得到图像水平方向和垂直方向的梯度。
接下来,要计算该点的orientation,首先计算梯度形成的正切角,
θ 的取值范围可以是 0∘−180∘ 或者 0∘−360∘, 一般来说取 0∘−180∘,将这 0∘−180∘ 分成K个区间,那么每个区间的跨度是Δ=180/K, orientation 记录的就是正切角落入第几个区间:
一般来说K=9, 那么Δ=20, Ori 的范围就是 0-8, 图像上每一个点都有一个正切角 θ, 并且可以得到每个像素点的orientation, 可以对这些orientation 做统计,就能得到一个histogram, 即直方图。所以称为 Histogram of oriented gradients.
我们可以看到,如果K 定了的话,那么 histogram 的长度也就定了。如果在整张图像上都用这一个histogram 来统计,那么不管图像的尺寸多大,最终的histogram还是长度为K。很显然,这不是我们希望看到的,这样必然会丢失很多信息。所以就有block representation.
block representation, 简单来说,就是将图像进行分块, 将图像分成一块一块,每一块都可以用一个histogram 做统计,然后将每一块的histogram 连起来,形成一个长的的histogram。block representation 也是局部特征提取最常用到的一种方式。
图像分块,也有两种方式,一种是overlap,一种是non-overlap,也就是说块与块之间有重叠,或者没有重叠。在计算HoG的时候,一般都会选择overlap 的分块方式。
MATLAB 中已经集成了HoG 的函数,可以直接调用库函数计算HoG. 这个函数的调用形式如下:
[f1, visualization]=extractHOGFeatures(I)
其中 I 是输入的图像, f1 就是计算得到的HoG 特征,是一个高维的histogram, visualization 是将HoG 进行可视化的一个 object 变量。
这个函数的输入变量有很多,除了输入图像I 之外,还有一些其它的变量, 一般都会采用默认的缺省值。
下面逐一介绍这些缺省变量:
cellsize: [8 ,8], 这是计算HoG的最小块了,每个 8×8 的 cell 都可以得到一个histogram。
Blocksize: [2, 2], 这是说明一个block 含有多少个cell,[2 2] 意味着一个block 含有 2×2 个cell。
BlockOverlap: 这是说明block 之间重叠部分的大小,以cell的个数来表示,默认值是一半的cell都有重叠。
NumBins: 就是上面提到的K,默认值为9。
UseSignedOrientation: 就是上面提到的角度的取值范围,默认为无符号的角度范围,即 0∘−180∘
所以说,采用默认值计算,虽然一个cell 的histogram的长度只有9,但是一个block 有4 个 cell,那么一个block 的histogram 的长度变成了36,对于一张尺寸为64×64 的图像来说,采用overlap 的分块方式,将有 49 个block,所以最终 HoG 的长度是 36×64=1764. 图像尺寸越大,HoG 的长度也会随之增长。不过总得来说,HoG 还算是一种简洁紧凑的特征。比起Gabor,LBP,SIFT 来说,算是比较经济实惠,性价比很高的了。
最后给出一个例子:
参考来源
https://en.wikipedia.org/wiki/Histogram_of_oriented_gradientsDalal N, Triggs B. Histograms of oriented gradients for human detection[C]//Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on. IEEE, 2005, 1: 886-893.
机器视觉 Histogram of oriented gradients的更多相关文章
- SIFT(Scale-invariant feature transform) & HOG(histogram of oriented gradients)
SIFT :scale invariant feature transform HOG:histogram of oriented gradients 这两种方法都是基于图像中梯度的方向直方图的特征提 ...
- 【翻译】HOG, Histogram of Oriented Gradients / 方向梯度直方图 介绍
本文翻译自 SATYA MALLICK 的 "Histogram of Oriented Gradients" 原文链接: https://www.learnopencv.com/ ...
- 【笔记】HOG (Histogram of Oriented Gradients, 方向梯度直方图)的开源实现
wiki上的介绍 OpenCV的实现 cv::HOGDescriptor Struct Reference opencv cv::HOGDescriptor 的调用例子 HOGDescriptor h ...
- Histogram of Oriented Gridients(HOG) 方向梯度直方图
Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模式识别领域很常用的一种描述图像局部纹理的特征.这个特征名字起的也很直白,就是说先计算图片某一区域中不同 ...
- (转)梯度方向直方图HOG(Histograms of Oriented Gradients )
HOG(Histograms of Oriented Gradients )梯度方向直方图 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视 ...
- 【计算机视觉】Histogram of Oriented Gridients(HOG) 方向梯度直方图
Histogram of Oriented Gridients(HOG) 方向梯度直方图 Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模式识别领域很 ...
- Face recognition using Histograms of Oriented Gradients
Face recognition using Histograms of Oriented Gradients 这篇论文的主要内容是将Hog算子应用到人脸识别上. 转载请注明:http://blog. ...
- 行人检測之HOG特征(Histograms of Oriented Gradients)
之前的文章行人计数.计次提到HOG特征这个概念,这两天看了一下原版的论文,了解了一下HOG特征的原理,并依据自己的理解将这种方法的流程写了下来,假设有不正确的地方欢迎指正. HOG(Histogram ...
- Machine Learning 学习笔记
点击标题可转到相关博客. 博客专栏:机器学习 PDF 文档下载地址:Machine Learning 学习笔记 机器学习 scikit-learn 图谱 人脸表情识别常用的几个数据库 机器学习 F1- ...
随机推荐
- DOTA游戏相关的文章
DOTA里面到底有几号位?各代表什么? DOTA新手进阶之S.SHIFT及M键的使用 Dota开局 对线方法技巧总结 dota补刀的技巧 dota需要注意的小细节 dota前期如何对线 DotA 命令 ...
- Coursera上的machine learning学完啦
Coursera上的第一门公开课最终要结束啦-- 全部的代码http://download.csdn.net/detail/abcd1992719g/7306053 老师的Octave代码很赞.框架打 ...
- Cocos2d-x 更改文字换行风格 ( cocos2dx change line )
Cocos2dx change line 在 cocos2dx change line 的实现中,我们能够简单的使用 dimensions属性控制换行.使用它仅仅需将相应的參数值传入构造函数,或者调用 ...
- Splash动画启动app时空白屏
相信大多数人一开始都会对启动app的时候出现先白瓶或者黑屏然后才进入第一个界面,例如:SplashActivity.那这是什么原因造成的呢? <style name="Splash_T ...
- 数据挖掘之pandas
sdata={'语文':89,'数学':96,'音乐':39,'英语':78,'化学':88} #字典向Series转化 @@ >>> studata=Series(sdata) & ...
- easyNetq demo
本demo包含一个类库,2个console程序 1.新建类库 MQHelper,控制台程序 consumer和proc ,控制台程序引用MQHelper 2.使用nuget安装easynwtq 和 ...
- 深入Asyncio(三)Asyncio初体验
Asyncio初体验 Asyncio在Python中提供的API很复杂,其旨在替不同群体的人解决不同的问题,也正是由于这个原因,所以很难区分重点. 可以根据asyncio在Python中的特性,将其划 ...
- ASP.NET动态网站制作(5)-- 标签语义化及知识补充
前言:这节课主要是讲标签语义化及一些知识点的补充 内容:参考老师的博文:http://www.cnblogs.com/ruanmou/p/4821894.html
- jquery在网页实时显示时间;
1.定义一个显示时间的位置 <div id="shijian"> </div> 2.jquery代码 function showTime() { var c ...
- 【BZOJ2151】种树 双向链表+堆(模拟费用流)
[BZOJ2151]种树 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n. ...