icvInitCARTHaarClassifier

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

1  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];
}
时间: 2024-10-11 21:12:10

icvInitCARTHaarClassifier的相关文章

Opencv研读笔记:haartraining程序之icvCreateCARTStageClassifier函数详解~

之前介绍了haartraining程序中的cvCreateMTStumpClassifier函数,这个函数的功能是计算最优弱分类器,这篇文章介绍一下自己对haartraining中关于强分类器计算的一些理解,也就是程序中的icvCreateCARTStageClassifier函数. 由于haartraining是基于HAAR特征进行adaboost训练,对于HAAR特征的处理比较繁琐,采用了奇数弱分类器补充针对翻转特征最优弱分类器计算的代码,所以代码看起来较为冗长.此外,其采用了较多的中间结构

opencv源代码分析之二:cvhaartraining.cpp

我使用的是opencv2.4.9.安装后.我的cvboost..cpp文件的路径是........\opencv\sources\apps\haartraining\cvhaartraining.cpp,研究源代码那么多天,有非常多收获.opencv库真是非常强大.当中在这篇博文中我有部分凝视,其它的有关知识请參考我博客http://blog.csdn.net/ding977921830?viewmode=contents.详细内容例如以下: /*M///////////////////////

opencv源码分析之二:cvhaartraining.cpp

我使用的是opencv2.4.9,安装后,我的cvboost..cpp文件的路径是........\opencv\sources\apps\haartraining\cvhaartraining.cpp,研究源码那么多天,有很多收获,opencv库真是非常强大.其中在这篇博文中我有部分注释,其他的有关知识请参考我博客http://blog.csdn.net/ding977921830?viewmode=contents.具体内容如下: /*M///////////////////////////