adaboost训练 之 弱分类器训练的opencv源码详解 1

adaboost训练弱分类器的原理见上一个博客::http://blog.csdn.net/lanxuecc/article/details/52681525
opencv中adaboost训练弱分类器的主体代码是函数cvCreateCARTClassifier,这个函数通过大致逻辑是:

1、通过调用训练结点函数cvCreateMTStumpClassifier来创建根结点
2、在要求弱分类器特征不只一个的情况下,通过分裂结点来增加新的特征形成CART树的弱分类器。

源码及注释如下

CV_BOOST_IMPL
CvClassifier* cvCreateCARTClassifier( CvMat* trainData,     //预计算的训练样本每个特征的值矩阵
                                      int flags,            //1表示样本按行排列,0表示样本按行排列
                                      CvMat* trainClasses,  //训练样本类别向量,如果是正样本标识为1,负样本标识为-1
                                      CvMat* typeMask,      //为了便于回调函数而统一格式的变量
                                      CvMat* missedMeasurementsMask,  //同上
                                      CvMat* compIdx,           //特征序列向量
                                      CvMat* sampleIdx,         //样本序列向量
                                      CvMat* weights,           //样本权值向量
                                      CvClassifierTrainParams* trainParams ) //传入一些弱分类器所需的参数比如需要几个特征,和一些需用的分类函数指针 
{
    CvCARTClassifier* cart = NULL;//CART树状弱分类器
    size_t datasize = 0;
    int count = 0;                // CART中的节点数目
    int i = 0;
    int j = 0;

    CvCARTNode* intnode = NULL;  // CART节点  
    CvCARTNode* list = NULL;     // 候选节点链表
    int listcount = 0;           // 候选节点个数
    CvMat* lidx = NULL;          // 左子节点样本序列
    CvMat* ridx = NULL;          // 右子节点样本序列 

    float maxerrdrop = 0.0F;
    int idx = 0;

    //定义节点分裂函数指针  这个函数指针指向的是函数icvSplitIndicesCallback
    void (*splitIdxCallback)( int compidx, float threshold,
                              CvMat* idx, CvMat** left, CvMat** right,
                              <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值