HOG构造函数

CV_WRAP HOGDescriptor() :winSize(64,128), blockSize(16,16), blockStride(8,8),      cellSize(8,8),nbins(9), derivAperture(1), winSigma(-1), histogramNormType(HOGDescriptor::L2Hys),L2HysThreshold(0.2), gammaCorrection(true), nlevels(HOGDescriptor::DEFAULT_NLEVELS)

{}

CV_WRAP HOGDescriptor(Size_winSize, Size _blockSize, Size _blockStride,                 Size _cellSize, int _nbins, int_derivAperture=1, double _winSigma=-1, int _histogramNormType=HOGDescriptor::L2Hys,double _L2HysThreshold=0.2, bool _gammaCorrection=false, int_nlevels=HOGDescriptor::DEFAULT_NLEVELS) : winSize(_winSize),blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),gammaCorrection(_gammaCorrection), nlevels(_nlevels)

{}

CV_WRAP HOGDescriptor(const String&filename)

{

load(filename);

}

HOGDescriptor(const HOGDescriptor& d)

{

d.copyTo(*this);

}

我们看到HOGDescriptor一共有4个构造函数,前三个有CV_WRAP前缀,表示它们是从DLL里导出的函数,即我们在程序当中可以调用的函数。

HOG基本概念

在构造函数中,有几个参数非常重要,分别为winSize(64,128),  blockSize(16,16),  blockStride(8,8), cellSize(8,8),  nbins(9)。在此,用几个示意图来表示。

a)       窗口大小winSize

b)      块大小blockSize

c)       胞元大小cellSize

d)       梯度方向数

nbins代表在一个胞元中统计梯度的方向数目。如:nbins=9表示一个胞元内统计9个方向的梯度直方图。

Hog特征维数的计算

首先给出一个hog

HOGDescriptor* hog = newHOGDescriptor(cvSize(64, 48), cvSize(8, 6), cvSize(8, 6), cvSize(4, 3), 9);

根据上面的概念可知,cvSize(64,48)表示窗口的大小,cvSize(8, 6)表示块(block)大小,cvSize(8,6)表示块滑动增量(blockStride)大小,cvSize(4, 3)表示胞元(cell)大小,9表示每个胞单元中梯度直方图的数量。

注:输入的图片尺寸为640×480。

据此,可知:

一个块(block)包含A=(blockSize.width/cellSize.width)*(blockSize.height / cellSize.height)个胞元(cell),所以一个块(block)含有9A个梯度直方图。按照所给出的数据,可得结果为36。

一个窗口包含B=((windowSize.width-blockSize.width)/(blockStrideSize.width)+1)* ((windowSize.height-blockSize.height)/(blockStrideSize.height)+1)个块(block),所以一个窗口包含9AB个梯度直方图。

按照所给出的数据,可得结果为2304。

其次,计算特征向量hog->compute(trainImg,descriptors, Size(64, 48), Size(0, 0))

此处,trainImg代表输入的图片(此处尺寸为640×480),descriptors表示保存特征结果的Vector,Size(64,48)表示windows的步进,第四个为padding,用于填充图片以适应大小。

当padding以默认状态Size(0,0)出现,滑动窗口window来计算图片时,

结果不一定为整数。

此时,查看compute()函数发现,其中有一段代码如下:

padding.width = (int)alignSize(std::max(padding.width,0), cacheStride.width);

padding.height = (int)alignSize(std::max(padding.height,0), cacheStride.height);

这段代码就是用来将padding的大小来适应stride的大小。

在我的实例中,由于取得数都事先设计好,都是整数。而当若结果不为整数时,则将其取值为比其大的最小整数。如若padding.width计算为7.8时,就取8.

所以一幅640×480的图片,按照前面的参数,则可以取的特征数为230400维。

在此,特别感谢几位,分别为:

http://www.cnblogs.com/tornadomeet/archive/2012/08/15/2640754.html

此篇博文总结了一些网上的参考资料,采用Hog特征训练的流程及对OpenCV中Hog代码进行了解释

http://blog.csdn.net/raocong2010/article/details/6239431

此篇博文对Hog中Block,Cell的概念进行了详细的解释。我此篇博客中的图片来自于这篇博文。非常感谢。

http://gz-ricky.blogbus.com/logs/85326280.html

此篇博文对Hog中的特征个数计算进行了详细的解释

HOG参数简介及Hog特征维数的计算相关推荐

  1. 模式识别学习笔记(6)——特征维数问题

    特征维数带来什么问题? 1.计算 2.存储 3.泛化能力,过拟合overfitting 分类错误率与特征 特征维数决定可分性 比如:3D空间完全可分,而2D和1D投影空间有重叠 但,增加特征也可能导致 ...

  2. c语言中二维数组中维数的计算,数组指针字符串C语言程序设计-第4章.ppt

    <数组指针字符串C语言程序设计-第4章.ppt>由会员分享,可在线阅读,更多相关<数组指针字符串C语言程序设计-第4章.ppt(132页珍藏版)>请在人人文库网上搜索. 1.程 ...

  3. c语言中二维数组中维数的计算,2015年计算机二级《C语言》考试上机测试题(4)

    21.B.[解析]y--的作用是先取其值作为表达式的值,然后Y的值减1存入Y.当y>0时循环继续,直到y=0时循环结束,然后Y值减l存入Y中,所以选B. 22.C.[解析]本题中,语句print ...

  4. 特征提取(Feature Detection)之——HOG (Histogram of Oriented Gradient)特征

    1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...

  5. flipdim--按指定维数翻转矩阵

    [功能简介]按指定维数翻转矩阵. [语法格式] B=flipdim(A,dim) 按指定维数翻转矩阵,flipdim(A,1)=flipud(A),且flipdim(A,2) =fliplr(A). ...

  6. Python实现相空间重构求关联维数——GP算法、自相关法求时间延迟tau、最近邻算法求嵌入维数m

    Python实现相空间重构求关联维数--GP算法.自相关法求时间延迟tau.最近邻算法求嵌入维数m GP算法: 若有一维时间序列为{x1,x2,-,xn},对其进行相空间重构得到高维相空间的一系列向量 ...

  7. 特征选择(一)-维数问题与类内距离

    什么是特征选择? 简单说,特征选择就是降维. 特征选择的任务 就是要从n维向量中选取m个特征,把原向量降维成为一个m维向量.但是降维必须保证类别的可分离性或者说分类器的性能下降不多. 注意降维具有片面 ...

  8. basicLSTMCELL() num_units参数代表了LSTM输出向量的维数

    https://blog.csdn.net/notHeadache/article/details/81164264 如下图片解释的清楚,来自stackoverflow 通俗易懂例子 https:// ...

  9. 深度学习近似建模,助力飞越「维数灾难」温度场

    允中 整理自 红山开源平台 量子位 报道 | 公众号 QbitAI 深度学习与飞行器设计领域交叉可为克服飞行器系统多学科设计优化的计算复杂性难题开辟一条全新途径.国防科技创新研究院无人系统技术研究中心 ...

最新文章

  1. 漫画:我用深度学习框架画下女朋友最美的脸
  2. 部署Chromedriver
  3. MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用
  4. 添加虚拟主机 php,给 phpstudy 添加虚拟主机
  5. NYOJ 595 乱七八糟
  6. Linux进程间通信——使用共享内存
  7. 江翰网页防篡改系统解决方案--前言
  8. doublevalue_Java Double类doubleValue()方法与示例
  9. 使用JWT来实现单点登录功能
  10. PHP字符串函数hex2bin( 转换十六进制字符串为二进制字符串)
  11. 关于MSHTML控件使用的问题
  12. js字体溢出字体变小_可变字体:它们是什么,以及如何使用它们
  13. 【大数据技术干货】(还不懂数仓,数据中心?看这一篇就够了!)在实际的开发生产中,让你了解企业级数据中心整体架构(DB+ETL+ODS+DW+DM)的各个层次的过程详解,数据联系及功能区分
  14. git基础命令以及用法
  15. excel 筛选重复项_列表项的Excel筛选器:2011年“鲨鱼周”
  16. 广州大喜事婚庆公司报价表
  17. 福州大学866信号与系统初试经验分享
  18. mac下免费的动态截屏制图工具:kap
  19. python socket发包_python 多线程tcp udp发包 Dos工具。
  20. Quill编辑器内置样式配置

热门文章

  1. caffe训练分类模型教程
  2. require的使用
  3. win7硬件要求_电脑操作系统谁更好用?win7、win10谁才是最让人放心的
  4. ipmitool常用命令详解
  5. Native English
  6. c#的Console.WriteLine中花括号怎么用
  7. 为什么PreviousPage为null
  8. Ubuntu20.04分区方案
  9. 电脑图片png怎么转换成jpg的3种高效方法
  10. 小悦2013(V1.3.2)功能小节