程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> OpenCV HOGDescriptor 參數圖解

OpenCV HOGDescriptor 參數圖解

編輯:C++入門知識

最近要做圖像特征提取,可能要用下HOG特征,所以研究了下OpenCV的HOG描述子。OpenCV中的HOG特征提取功能使用了HOGDescriptor這個類來進行封裝,其中也有現成的行人檢測的接口。然而,無論是OpenCV官方說明文檔還是各個中英文網站目前都沒有這個類的使用說明,所以在這裡把研究的部分心得分享一下。
      首先我們進入HOGDescriptor所在的頭文件,看看它的構造函數需要哪些參數。

[cpp]
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) 
{} 
[cpp] 
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) 
{} 
[cpp]
CV_WRAP HOGDescriptor(const String& filename) 

    load(filename); 

[cpp] view plaincopy
HOGDescriptor(const HOGDescriptor& d) 

    d.copyTo(*this); 

      我們看到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源代碼是按照下面的式子計算出描述子的維度的。

[cpp]
size_t HOGDescriptor::getDescriptorSize() const 

    CV_Assert(blockSize.width % cellSize.width == 0 && 
        blockSize.height % cellSize.height == 0); 
    CV_Assert((winSize.width - blockSize.width) % blockStride.width == 0 && 
        (winSize.height - blockSize.height) % blockStride.height == 0 ); 
    return (size_t)nbins* www.2cto.com
        (blockSize.width/cellSize.width)* 
        (blockSize.height/cellSize.height)* 
        ((winSize.width - blockSize.width)/blockStride.width + 1)* 
        ((winSize.height - blockSize.height)/blockStride.height + 1); 

作者:xuhongwei0411

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved