关于hog特征提取进行行人检测的程序说明

来源:互联网 发布:js判断是否为整数 编辑:程序博客网 时间:2024/05/20 16:36

最近在学习行人检测,看很多大牛写的一些code的一些笔记,主要作用辅助自己学习,如果能帮到你那我也是开心哒!

1.相关函数的介绍,参考来自:http://blog.csdn.net/wangningbo128/article/details/6422554

1) getDefaultPeopleDetector() 获得3780维检测算子(105 blocks with 4 histograms each and 9 bins per histogram there are 3,780 values)--(为什么是105blocks?)
2).cv::HOGDescriptor hog; 创建类的对象 一系列变量初始化  
winSize(64,128), blockSize(16,16), blockStride(8,8),
cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),
histogramNormType(L2Hys), L2HysThreshold(0.2), gammaCorrection(true)
3). 调用函数:detectMultiScale(img, found, 0, cv::Size(8,8), cv::Size(24,16), 1.05, 2); 
  参数分别为待检图像、返回结果列表、门槛值hitThreshold、窗口步长winStride、图像padding margin、比例系数、门槛值groupThreshold;通过修改参数发现,就所用的某图片,参数0改为0.01就检测不到,改为0.001可以;1.05改为1.1就不行,1.06可以;2改为1可以,0.8以下不行,(24,16)改成(0,0)也可以,(32,32)也行
该函数内容如下
(1) 得到层数 levels 
某图片(530,402)为例,lg(402/128)/lg1.05=23.4 则得到层数为24
(2) 循环levels次,每次执行内容如下
HOGThreadData& tdata = threadData[getThreadNum()];
Mat smallerImg(sz, img.type(), tdata.smallerImgBuf.data);
调用以下核心函数
detect(smallerImg, tdata.locations, hitThreshold, winStride, padding);
其参数分别为,该比例下图像、返回结果列表、门槛值、步长、margin
该函数内容如下:
(a)得到补齐图像尺寸paddedImgSize
(b)创建类的对象 HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride); 在创建过程中,首先初始化 HOGCache::init,包括:计算梯度 descriptor->computeGradient、得到块的个数105、每块参数个数36 

(c)获得窗口个数nwindows,以第一层为例,其窗口数为(530+32*2-64)/8+1、(402+32*2-128)/8+1 =67*43=2881,其中(32,32)为winStride参数,也可用(24,16)
(d)在每个窗口执行循环,内容如下
在105个块中执行循环,每个块内容为:通过getblock函数计算HOG特征并归一化,36个数分别与算子中对应数进行相应运算;判断105个块的总和s >= hitThreshold 则认为检测到目标 
4)主体部分感觉就是以上这些,但很多细节还需要进一步弄清。

OpenCV HOGDescriptor参数图解,参见:http://blog.sina.com.cn/s/blog_82e9a8f80102wwdp.html

2.fflush()函数的用法,参见:http://blog.csdn.net/fqc0306/article/details/6989869

3.c语言中strlen()函数的用法,参见:http://blog.csdn.net/xuefu2008/article/details/4646092

4.fgets()函数用法,参见:http://mawenjie.blog.163.com/blog/static/269501052009102611615610/

5.GetTickCount()函数的作用和用法,参见:http://www.cnblogs.com/jiayouwyhit/p/3683374.html

注意:C++版的getTickFrequency返回的是每秒钟的tick数,C版的cvGetTickFrequency返回的是每微秒的tick数

6.cvRound 和cvClone的用法,参见:http://blog.csdn.net/huxiongge/article/details/6863815

7.最后程序,参看:http://blog.csdn.net/ttransposition/article/details/11720801

                         和:http://ju.outofmemory.cn/entry/155987




1 0
原创粉丝点击