机器视觉 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- ...
随机推荐
- JS创建表单提交备份
//保存 function saveFT() { var data = { createDate: GetDateStr(0), name: $("#txtName").val() ...
- 原生domReady封装
核心思路: 标准浏览器(含IE9+)比较简单,直接监听DOMContentLoaded事件: 低版本的IE(IE678)两套机制: 1)尝试轮询document.documentElement.doS ...
- 【转载】ASP.NET之旅--深入浅出解读IIS架构
在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net. 他们耐心. 细致地告诉你如何一步步拖放控件. 设置控件属性.编写 CodeBehind代码,以实现某个特定的功能. ...
- Splash动画启动app时空白屏
相信大多数人一开始都会对启动app的时候出现先白瓶或者黑屏然后才进入第一个界面,例如:SplashActivity.那这是什么原因造成的呢? <style name="Splash_T ...
- javascript调试常用工具讲解
.Console命令详解,让调试js代码变得更简单 2.<Firebug入门指南>
- golang中字符串的查找方法小结
1)func Contains(s, substr string) bool这个函数是查找某个字符是否在这个字符串中存在,存在返回true 示例如下: import ( "fmt" ...
- linux crontab 定时任务解析
-----------crontab定时任务---------------------- 检查crontab工具是否安装 crontab -l 检查crontab服务是否启动 service cron ...
- 高速修复汉澳sinox命令解释程序bash shell漏洞
bash是linux默认命令行管理程序shell.汉澳 sinox也安装有,尽管sinox并没有默认使用bash.可是用户一旦使用就会可能被通过漏洞入侵,所以必须高速修复.尽管sinox使用freeb ...
- 手动删除引用nuget如何还原
1.不小心从项目的引用中删除了nuget安装的程序集; 2.从其他地方复制的packages.config到当前项目; 这两种情况 在解决方案中是无法通过还原nuget来还原程序集的,可以通过以下的方 ...
- 《Programming WPF》翻译 第4章 5.主从复合(Master-Detail)绑定
我们已经看到绑定一个单独的对象,还看到绑定一个单独的对象列表.另一种非常流行的方式是绑定多个对象列表,尤其是相关的列表.例如,如果你向用户显示一个客户列表,当他们选中其中一个客户,就会显示客户的相关订 ...