首页 > 代码库 > Opencv研读笔记:haartraining程序之icvCreateCARTStageClassifier函数详解~
Opencv研读笔记:haartraining程序之icvCreateCARTStageClassifier函数详解~
之前介绍了haartraining程序中的cvCreateMTStumpClassifier函数,这个函数的功能是计算最优弱分类器,这篇文章介绍一下自己对haartraining中关于强分类器计算的一些理解,也就是程序中的icvCreateCARTStageClassifier函数。
由于haartraining是基于HAAR特征进行adaboost训练,对于HAAR特征的处理比较繁琐,采用了奇数弱分类器补充针对翻转特征最优弱分类器计算的代码,所以代码看起来较为冗长。此外,其采用了较多的中间结构体变量,例如CvIntHaarClassifier结构体(用于模拟强分类器结构体CvStageHaarClassifier的父类),CvBoostTrainer结构体(用于初始化,更新样本权值等)等等,所以代码看起来比较绕。
强分类器的创建,其中,样本权值的更新,程序中设计了四种经典adaboost算法版本,它们是,Discrete Adaboost、Real Adaboost、Logit Boost、Gentle Adaboost。代码通过函数指针的形式(实际上这也是opencv一直常用的手段)对函数进行回调。
以上说的就是icvCreateCARTStageClassifier中值得注意的几点,下面上代码,是根据自己的理解添加的注释,请各位不吝批评指正哈!
转载请注明:http://blog.csdn.net/wsj998689aa/article/details/42398235
static CvIntHaarClassifier* icvCreateCARTStageClassifier( CvHaarTrainingData* data, // 全部训练样本 CvMat* sampleIdx, // 实际训练样本序列 CvIntHaarFeatures* haarFeatures, // 全部HAAR特征 float minhitrate, // 最小正检率(用于确定强分类器阈值) float maxfalsealarm, // 最大误检率(用于确定是否收敛) int symmetric, // HAAR是否对称 float weightfraction, // 样本剔除比例(用于剔除小权值样本) int numsplits, // 每个弱分类器特征个数(一般为1) CvBoostType boosttype, // adaboost类型 CvStumpError stumperror, // Discrete AdaBoost中的阈值计算方式 int maxsplits ) // 弱分类器最大个数 { #ifdef CV_COL_ARRANGEMENT int flags = CV_COL_SAMPLE; #else int flags = CV_ROW_SAMPLE; #endif CvStageHaarClassifier* stage = NULL; // 强分类器 CvBoostTrainer* trainer; // 临时训练器,用于更新样本权值 CvCARTClassifier* cart = NULL; // 弱分类器 CvCARTTrainParams trainParams; // 训练参数 CvMTStumpTrainParams stumpTrainParams; // 弱分类器参数 //CvMat* trainData = http://www.mamicode.com/NULL;>
Opencv研读笔记:haartraining程序之icvCreateCARTStageClassifier函数详解~