CvStumpClassifier,CvCARTClassifier和CvCARTHaarClassifier

     在研究opencv源代码的过程中,CvStumpClassifier,CvCARTClassifier和CvCARTHaarClassifier这三个结构体老是搞混,索性自己整理一下,一个是方便自己复习,另一个是回馈csdn,方便大家,欢迎广大网友拍砖。

结构体CvStumpClassifier

typedef struct CvStumpClassifier
{
    CV_CLASSIFIER_FIELDS()
   int compidx;                      //这个弱分类器对应的特征编号。即这个弱分类器是第compidx特征产生的
   
   float lerror;                     //阈值左边的不纯度,也可称为左边的错误率
   float rerror;                     //阈值右边的不纯度  也可称为右边的错误率
   
   float threshold;                 //阈值
   float left;                      //当输入到当前弱分类器的特征值xi < threshold时,弱分类器返回left
   float right;                     //当输入到当前弱分类器的特征值xi > threshold时,弱分类器返回right
} CvStumpClassifier;
CvStumpClassifier是最简单的树桩分类器的结构体,它没有叶子节点,只有一个node。 它的输出用浮点型变量left和right表示。


2  结构体CvCARTClassifier

typedef struct CvCARTClassifier
{
   CV_CLASSIFIER_FIELDS()
    int  count;                     //弱分类器的个数
   /* internal nodes (each array of <count>elements) */
    int*compidx;                    //这个弱分类器对应的特征编号。即这个弱分类器是第compidx特征产生的
    float*threshold;                //阈值
    int*left;                       // 非叶子节点的左子节点序号(叶子节点为负数,非叶子节点为正数)
    int*right;                      // 非叶子节点的右子节点序号(叶子节点为负数,非叶子节点为正数)
    /* leaves (array of<count>+1 elements) */
    float*val;                     //输出,当特征值xi输入是在threshold[0]的左边,则输出val[0],否则输出val[1];
}CvCARTClassifier;
      CvCARTClassifier 是分类回归树分类器的结构体,包含叶子节点,当然当count=1时,就相当于一个树桩分类器。如果count不等于1时,它就包含了很多子节点。指针变量left是指该分类回归树分类器的左边分支所连接的一个节点的idx,这个子节点可以是叶子节点,也可以是非叶子节点;同理,对于指针变量right也是如此。它的输出用float型指针变量val表示,val[0]表示左节点的值,val[1]表示右边节点的输出值。注意CvCARTClassifier与CvStumpClassifier的区别。

3   结构体CvCARTHaarClassifier

typedef struct CvCARTHaarClassifier
{
    CV_INT_HAAR_CLASSIFIER_FIELDS()
   int count;                    //包含弱分类器的个数
   int* compidx;                 //这个弱分类器对应的特征编号。即这个弱分类器是第compidx特征产生的
   CvTHaarFeature* feature;      //弱分类器对应的特征的特征坐标
  CvFastHaarFeature* fastfeature;//弱分类器对应的特征的特征坐标
   float* threshold;             //该弱分类器的阈值
   int* left;                    //同上
   int* right;
   float* val;
} CvCARTHaarClassifier;

CvTHaarFeature和CvFastHaarFeature的区别请参考我的另外一篇文章,http://blog.csdn.net/ding977921830/article/details/46125097

CvCARTHaarClassifier是分类回归树haar分类器的结构体,它的特征肯定是haar特征,而且是分类回归树分类器。它的输出和左右子节点与CvCARTClassifier

相同。

4  CvStumpClassifier,CvCARTClassifier和CvCARTHaarClassifier的区别

从复杂程度来看:

CvStumpClassifier<CvCARTClassifier<CvCARTHaarClassifier

从能代表的范围来看:

CvStumpClassifier>CvCARTClassifier>CvCARTHaarClassifier

CvCARTClassifier由count个CvCARTNode组成,每个CvCARTNode有一个CvStumpClassifier。CvCARTNode请参考我的另一篇博文http://blog.csdn.net/ding977921830/article/details/46530343

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值