资源简介

这是本人本科做的毕业设计,根据opencv里面人体检测的HOG代码改写,加上了完整的注释(opencv里面是没有任何注释的),并且增加了样本的训练(代码中只提供了PCA50-HOG的检测算子,如有其它需要可以自行训练),线性检测时使用线性SVM优化,高斯检测时使用PCA的降维。同时对候选区域整合代码做了简化处理。 最后感谢网上的各位好心人提供的各类资源,在毕业设计过程中给予了我很大帮助。鉴于网上仍然还有若干未解决的问题,今天把我所做的也分享给大家,希望能给还在探索ing的朋友一些启发。如果有任何问题请留言或者email。

资源截图

代码片段和文件信息

#include “cppHoG.h“
#include “opencv2/highgui/highgui.hpp“
#include 
#include 
int iPosWindows =0; int iNegWindows=0; 
//constructor 
CcppHoG :: CcppHoG(Size sWinSizeSize sBlockSizeSize sBlockStrideSize sWinStrideSize sCellSizeint iBinsenGamacorrect enGammaCorstyleenBlockNormstyle enNormstylefloat fGaussSigmadouble dBlockThreshold)
{   
    this->sWinSize = sWinSize;
    this->sBlockStride = sBlockStride;
this->sWinStride = sWinStride;
    this->sBlockSize = sBlockSize;
    this->sCellSize = sCellSize;
    this->iBins = iBins;
    this->enGammaCorstyle = enGammaCorstyle;
this->enNormstyle = enNormstyle;
m_fGaussSigma = fGaussSigma;
this->dBlockThreshold = dBlockThreshold;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
//compute the img‘s gradient
//this is not limited to the img of 64*158 size
//grad stores the gradient of each pixel
//angle means the angle of gradient
//paddingTL paddingBR is the padding scale which is mentioned in the paper
////////////////////////////////////////////////////////////////////////////////////////////////////////
void CcppHoG :: computeGradient(const Mat& mImg Mat& mGrad Mat& mAngle
                             Size sPaddingTL Size sPaddingBR) const
{
    // assert the img is either 1 channel or 3 channel
    uchar ucChannels =mImg.channels();  
    assert(ucChannels == 1 || ucChannels == 3);
    // compute the size after padding
    Size newSize(mImg.cols + sPaddingTL.width + sPaddingBR.width mImg.rows + sPaddingBR.height + sPaddingTL.height);
    //both the mGrad and mAngle have two channels    
    mGrad.create(newSizeCV_32FC2);
    mAngle.create(newSizeCV_8UC2);
    
    // a vector contains the color scalar 0-255; 
    Mat_ _mScalar(1256);
    const float *mScalar = &_mScalar(00);
    //the following method is to make gamacorrection 
    //as you will see this is an efficiency algorithm
    //e.g. if the pixel value is 36 and GamaSqrt is chosen 
    //the new value = _mScalar(old value);
    //so much sqrt functions will be ignored.
    if(enGammaCorstyle == GamaSqrt)
    {
        for(int i = 0; i < 256; i++)
            _mScalar(0i) = std::sqrt(float(i));
    }
    else if(enGammaCorstyle == NoGama)
    {
        for(int j = 0; j < 256; j++)
            _mScalar(0j) = (float)j;
    }
    
    //because of the padding we need two more variants iXmapiYMap.
    //what‘s more when take the edge into account a new virtual edge will 
    //be used. here is a simple example help to understand better.
    /*
        suppose the img‘s matrix is the simple form
        [123;
         456;
         789;]
        and the paddings are 1and adding the virtual edge
        the img‘s size should be 7*7
        so the padded form should be as follows
        [
            0 0 0 0 0 0 0
            0 0 0 0 0 0 0
            0 0 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     115338  2012-06-05 00:40  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\cppHoG.cpp

     文件       4132  2012-06-03 22:57  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\cppHoG.h

     文件       4435  2012-06-04 21:51  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\cppHoG.vcproj

     文件       1405  2012-04-16 17:13  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\cppHoG.vcproj.HP21.Administrator.user

     文件       1415  2012-06-11 18:27  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\cppHoG.vcproj.lishan-pc.xiaoxiaolishan.user

     文件      18307  2005-04-21 21:09  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\crop_000001a.png

     文件      19453  2012-04-18 21:59  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\crop_000010a.png

     文件       7360  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\BuildLog.htm

     文件        663  2012-05-18 10:52  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\cppHoG.exe.embed.manifest

     文件        728  2012-05-18 10:52  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\cppHoG.exe.embed.manifest.res

     文件        621  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\cppHoG.exe.intermediate.manifest

     文件     903269  2012-06-05 00:40  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\cppHoG.obj

     文件     197345  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\mainDetect.obj

     文件         65  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\mt.dep

     文件     789504  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\vc90.idb

     文件     626688  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\vc90.pdb

     文件     441474  2012-05-24 19:30  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\Debug\wBlockCache.obj

     文件       8043  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\mainDetect.cpp

     文件       3269  2012-05-18 11:01  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\note.txt

     文件        767  2012-04-23 18:11  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\resource.h

     文件      32758  2012-05-24 19:30  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\wBlockCache.cpp

     文件       1607  2012-03-28 11:23  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG\wBlockCache.h

     文件   18181120  2012-06-11 18:27  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG.ncb

     文件        884  2012-03-13 20:51  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG.sln

    ..A..H.     72704  2012-06-11 18:27  cppHoG-raw-RBF\cppHoG-raw-RBF\cppHoG.suo

     文件     302592  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\Debug\cppHoG.exe

     文件    2876612  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\Debug\cppHoG.ilk

     文件    2386944  2012-06-11 18:23  cppHoG-raw-RBF\cppHoG-raw-RBF\Debug\cppHoG.pdb

     文件     115622  2012-06-05 01:01  cppHoG-raw-RBF-PCA\cppHoG-raw-RBF\cppHoG\cppHoG.cpp

     文件       4132  2012-06-03 22:57  cppHoG-raw-RBF-PCA\cppHoG-raw-RBF\cppHoG\cppHoG.h

............此处省略52个文件信息

评论

共有 条评论