icvInitCARTHaarClassifier

来源:互联网 发布:耐克鞋子型号大全 知乎 编辑:程序博客网 时间:2024/06/06 12:56

           在介绍icvInitCARTHaarClassifier以前有必要先介绍一下它括号里面的三个参数,CvCARTHaarClassifier,CvCARTClassifier和CvIntHaarFeatures。详情请参考我的另外两篇博文。CvIntHaarFeatures和CvCARTClassifier和CvCARTHaarClassifier。

CvCARTHaarClassifier,CvCARTClassifier和CvIntHaarFeatures

    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; <pre name="code" class="cpp">    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;  <pre name="code" class="cpp">    typedef struct CvIntHaarFeatures      {         CvSize winsize;           //采特征的窗口的大小,即样本图像的大小。         int count;                //总特征的个数。         CvTHaarFeature* feature;  //指向所有的Haar特征。         CvFastHaarFeature* fastfeature;      } CvIntHaarFeatures;  



2  icvInitCARTHaarClassifier

有了上面对三个结构体的介绍,就容易看懂icvInitCARTHaarClassifier参数传递的含义了。

/* *icvInitCARTHaarClassifier *初始化分类回归树haar分类器函数 *作用:把括号里的参数进行传递,也就是把后两个参数都传递给第一个参数 *具体来说就是,首先把intHaarFeatures 的特征按照cart中compidx[i]的顺序传递给carthaar(包括haar特征和快速haar特征); *然后,再把cart中的参数传递给carthaar。 */void icvInitCARTHaarClassifier( CvCARTHaarClassifier* carthaar,                                CvCARTClassifier* cart,                                CvIntHaarFeatures* intHaarFeatures ){    int i;    for( i = 0; i < cart->count; i++ )                //对于一棵树(carthaar)的cart->count个节点进行初始化    {        carthaar->feature[i] = intHaarFeatures->feature[cart->compidx[i]];          //初始化carthaar的feature,即把intHaarFeatures的特征传递给carthaar        carthaar->fastfeature[i] = intHaarFeatures->fastfeature[cart->compidx[i]];  //初始化carthaar的fastfeature,即把intHaarFeatures的快速特征传递给carthaar        carthaar->threshold[i] = cart->threshold[i];   //初始化阈值,即把cart的阈值传递给carthaar        carthaar->left[i] = cart->left[i];             //初始化carthaar的左分支节点        carthaar->right[i] = cart->right[i];           //初始化carthaar的右分支节点        carthaar->val[i] = cart->val[i];               //初始化carthaar的输出值        carthaar->compidx[i] = cart->compidx[i];    }    carthaar->count = cart->count;    carthaar->val[cart->count] = cart->val[cart->count];}


0 0