zoukankan      html  css  js  c++  java
  • OpenCV HOGDescriptor 参数图解

    防止以后再次掉入坑中,决定还是在写写吧

    OpenCV中的HOG特征提取功能使用了HOGDescriptor这个类来进行封装,其中也有现成的行人检测的接口。然而,无论是OpenCV官方说明文档还是各个中英文网站目前都没有这个类的使用说明,所以在这里把研究的部分心得分享一下。

          首先我们进入HOGDescriptor所在的头文件,看看它的构造函数需要哪些参数。 

    1     CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),
    2         cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),
    3         histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true), 
    4         nlevels(HOGDescriptor::DEFAULT_NLEVELS)
    5     {}
     1  CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,
     2                   Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,
     3                   int _histogramNormType=HOGDescriptor::L2Hys,
     4                   double _L2HysThreshold=0.2, bool _gammaCorrection=false,
     5                   int _nlevels=HOGDescriptor::DEFAULT_NLEVELS)
     6     : winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),
     7     nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),
     8     histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),
     9     gammaCorrection(_gammaCorrection), nlevels(_nlevels)
    10     {}
    1     
    2     CV_WRAP HOGDescriptor(const String& filename)
    3     {
    4         load(filename);
    5     }
    1     
    2     HOGDescriptor(const HOGDescriptor& d)
    3     {
    4         d.copyTo(*this);
    5     }

    看到HOGDescriptor一共有4个构造函数,前三个有CV_WRAP前缀,表示它们是从DLL里导出的函数,即我们在程序当中可以调用的函数;最后一个没有上述的前缀,所以我们暂时用不到,它其实就是一个拷贝构造函数。

          下面我们就把注意力放在前面的构造函数的参数上面吧,这里有几个重要的参数要研究下:winSize(64,128), blockSize(16,16), blockStride(8,8), cellSize(8,8), nbins(9)。上面这些都是HOGDescriptor的成员变量,括号里的数值是它们的默认值,它们反应了HOG描述子的参数。这里做了几个示意图来表示它们的含义。

          窗口大小 winSize

          块大小 blockSize

          胞元大小 cellSize

          梯度方向数 nbins

          nBins表示在一个胞元(cell)中统计梯度的方向数目,例如nBins=9时,在一个胞元内统计9个方向的梯度直方图,每个方向为180/9=20度。

          HOG描述子维度

          在确定了上述的参数后,我们就可以计算出一个HOG描述子的维度了。OpenCV中的HOG源代码是按照下面的式子计算出描述子的维度的。 

     1 size_t HOGDescriptor::getDescriptorSize() const
     2 {
     3     CV_Assert(blockSize.width % cellSize.width == 0 &&
     4         blockSize.height % cellSize.height == 0);
     5     CV_Assert((winSize.width - blockSize.width) % blockStride.width == 0 &&
     6         (winSize.height - blockSize.height) % blockStride.height == 0 );
     7     return (size_t)nbins*
     8         (blockSize.width/cellSize.width)*
     9         (blockSize.height/cellSize.height)*
    10         ((winSize.width - blockSize.width)/blockStride.width + 1)*
    11         ((winSize.height - blockSize.height)/blockStride.height + 1);
    12 }

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

  • 相关阅读:
    CodeForces 446A. DZY Loves Sequences(最长上升子序列)
    CodeForces
    2020牛客暑期多校训练营(第一场)
    POJ3281-Dining(最大流)(拆点)
    「杂题」图论杂题选做
    「学习小结」CDQ 分治多维偏序问题
    「算法笔记」Tarjan 算法 双连通分量
    「算法笔记」状压 DP
    「算法笔记」数位 DP
    「算法笔记」矩阵乘法
  • 原文地址:https://www.cnblogs.com/whiteBear/p/10027348.html
Copyright © 2011-2022 走看看