728 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			728 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
						|
//
 | 
						|
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
						|
//
 | 
						|
//  By downloading, copying, installing or using the software you agree to this license.
 | 
						|
//  If you do not agree to this license, do not download, install,
 | 
						|
//  copy or use the software.
 | 
						|
//
 | 
						|
//
 | 
						|
//                        Intel License Agreement
 | 
						|
//                For Open Source Computer Vision Library
 | 
						|
//
 | 
						|
// Copyright (C) 2000, Intel Corporation, all rights reserved.
 | 
						|
// Third party copyrights are property of their respective owners.
 | 
						|
//
 | 
						|
// Redistribution and use in source and binary forms, with or without modification,
 | 
						|
// are permitted provided that the following conditions are met:
 | 
						|
//
 | 
						|
//   * Redistribution's of source code must retain the above copyright notice,
 | 
						|
//     this list of conditions and the following disclaimer.
 | 
						|
//
 | 
						|
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
						|
//     this list of conditions and the following disclaimer in the documentation
 | 
						|
//     and/or other materials provided with the distribution.
 | 
						|
//
 | 
						|
//   * The name of Intel Corporation may not be used to endorse or promote products
 | 
						|
//     derived from this software without specific prior written permission.
 | 
						|
//
 | 
						|
// This software is provided by the copyright holders and contributors "as is" and
 | 
						|
// any express or implied warranties, including, but not limited to, the implied
 | 
						|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
						|
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
						|
// indirect, incidental, special, exemplary, or consequential damages
 | 
						|
// (including, but not limited to, procurement of substitute goods or services;
 | 
						|
// loss of use, data, or profits; or business interruption) however caused
 | 
						|
// and on any theory of liability, whether in contract, strict liability,
 | 
						|
// or tort (including negligence or otherwise) arising in any way out of
 | 
						|
// the use of this software, even if advised of the possibility of such damage.
 | 
						|
//
 | 
						|
//M*/
 | 
						|
 | 
						|
/*
 | 
						|
 * File cvclassifier.h
 | 
						|
 *
 | 
						|
 * Classifier types
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _CVCLASSIFIER_H_
 | 
						|
#define _CVCLASSIFIER_H_
 | 
						|
 | 
						|
#include <cmath>
 | 
						|
#include "cxcore.h"
 | 
						|
 | 
						|
#define CV_BOOST_API
 | 
						|
 | 
						|
/* Convert matrix to vector */
 | 
						|
#define CV_MAT2VEC( mat, vdata, vstep, num )       \
 | 
						|
    assert( (mat).rows == 1 || (mat).cols == 1 );  \
 | 
						|
    (vdata) = ((mat).data.ptr);                    \
 | 
						|
    if( (mat).rows == 1 )                          \
 | 
						|
    {                                              \
 | 
						|
        (vstep) = CV_ELEM_SIZE( (mat).type );      \
 | 
						|
        (num) = (mat).cols;                        \
 | 
						|
    }                                              \
 | 
						|
    else                                           \
 | 
						|
    {                                              \
 | 
						|
        (vstep) = (mat).step;                      \
 | 
						|
        (num) = (mat).rows;                        \
 | 
						|
    }
 | 
						|
 | 
						|
/* Set up <sample> matrix header to be <num> sample of <trainData> samples matrix */
 | 
						|
#define CV_GET_SAMPLE( trainData, tdflags, num, sample )                                 \
 | 
						|
if( CV_IS_ROW_SAMPLE( tdflags ) )                                                        \
 | 
						|
{                                                                                        \
 | 
						|
    cvInitMatHeader( &(sample), 1, (trainData).cols,                                     \
 | 
						|
                     CV_MAT_TYPE( (trainData).type ),                                    \
 | 
						|
                     ((trainData).data.ptr + (num) * (trainData).step),                  \
 | 
						|
                     (trainData).step );                                                 \
 | 
						|
}                                                                                        \
 | 
						|
else                                                                                     \
 | 
						|
{                                                                                        \
 | 
						|
    cvInitMatHeader( &(sample), (trainData).rows, 1,                                     \
 | 
						|
                     CV_MAT_TYPE( (trainData).type ),                                    \
 | 
						|
                     ((trainData).data.ptr + (num) * CV_ELEM_SIZE( (trainData).type )),  \
 | 
						|
                     (trainData).step );                                                 \
 | 
						|
}
 | 
						|
 | 
						|
#define CV_GET_SAMPLE_STEP( trainData, tdflags, sstep )                                  \
 | 
						|
(sstep) = ( ( CV_IS_ROW_SAMPLE( tdflags ) )                                              \
 | 
						|
           ? (trainData).step : CV_ELEM_SIZE( (trainData).type ) );
 | 
						|
 | 
						|
 | 
						|
#define CV_LOGRATIO_THRESHOLD 0.00001F
 | 
						|
 | 
						|
/* log( val / (1 - val ) ) */
 | 
						|
CV_INLINE float cvLogRatio( float val );
 | 
						|
 | 
						|
CV_INLINE float cvLogRatio( float val )
 | 
						|
{
 | 
						|
    float tval;
 | 
						|
 | 
						|
    tval = MAX(CV_LOGRATIO_THRESHOLD, MIN( 1.0F - CV_LOGRATIO_THRESHOLD, (val) ));
 | 
						|
    return logf( tval / (1.0F - tval) );
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* flags values for classifier consturctor flags parameter */
 | 
						|
 | 
						|
/* each trainData matrix column is a sample */
 | 
						|
#define CV_COL_SAMPLE 0
 | 
						|
 | 
						|
/* each trainData matrix row is a sample */
 | 
						|
#define CV_ROW_SAMPLE 1
 | 
						|
 | 
						|
#define CV_IS_ROW_SAMPLE( flags ) ( ( flags ) & CV_ROW_SAMPLE )
 | 
						|
 | 
						|
/* Classifier supports tune function */
 | 
						|
#define CV_TUNABLE    (1 << 1)
 | 
						|
 | 
						|
#define CV_IS_TUNABLE( flags ) ( (flags) & CV_TUNABLE )
 | 
						|
 | 
						|
 | 
						|
/* classifier fields common to all classifiers */
 | 
						|
#define CV_CLASSIFIER_FIELDS()                                                           \
 | 
						|
    int flags;                                                                           \
 | 
						|
    float(*eval)( struct CvClassifier*, CvMat* );                                        \
 | 
						|
    void (*tune)( struct CvClassifier*, CvMat*, int flags, CvMat*, CvMat*, CvMat*,       \
 | 
						|
                  CvMat*, CvMat* );                                                      \
 | 
						|
    int  (*save)( struct CvClassifier*, const char* file_name );                         \
 | 
						|
    void (*release)( struct CvClassifier** );
 | 
						|
 | 
						|
typedef struct CvClassifier
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_FIELDS()
 | 
						|
} CvClassifier;
 | 
						|
 | 
						|
#define CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
 | 
						|
typedef struct CvClassifierTrainParams
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
 | 
						|
} CvClassifierTrainParams;
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 Common classifier constructor:
 | 
						|
 CvClassifier* cvCreateMyClassifier( CvMat* trainData,
 | 
						|
                     int flags,
 | 
						|
                     CvMat* trainClasses,
 | 
						|
                     CvMat* typeMask,
 | 
						|
                      CvMat* missedMeasurementsMask CV_DEFAULT(0),
 | 
						|
                      CvCompIdx* compIdx CV_DEFAULT(0),
 | 
						|
                      CvMat* sampleIdx CV_DEFAULT(0),
 | 
						|
                      CvMat* weights CV_DEFAULT(0),
 | 
						|
                      CvClassifierTrainParams* trainParams CV_DEFAULT(0)
 | 
						|
                    )
 | 
						|
 | 
						|
 */
 | 
						|
 | 
						|
typedef CvClassifier* (*CvClassifierConstructor)( CvMat*, int, CvMat*, CvMat*, CvMat*,
 | 
						|
                                                  CvMat*, CvMat*, CvMat*,
 | 
						|
                                                  CvClassifierTrainParams* );
 | 
						|
 | 
						|
typedef enum CvStumpType
 | 
						|
{
 | 
						|
    CV_CLASSIFICATION       = 0,
 | 
						|
    CV_CLASSIFICATION_CLASS = 1,
 | 
						|
    CV_REGRESSION           = 2
 | 
						|
} CvStumpType;
 | 
						|
 | 
						|
typedef enum CvStumpError
 | 
						|
{
 | 
						|
    CV_MISCLASSIFICATION = 0,
 | 
						|
    CV_GINI              = 1,
 | 
						|
    CV_ENTROPY           = 2,
 | 
						|
    CV_SQUARE            = 3
 | 
						|
} CvStumpError;
 | 
						|
 | 
						|
 | 
						|
typedef struct CvStumpTrainParams
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
 | 
						|
    CvStumpType  type;
 | 
						|
    CvStumpError error;
 | 
						|
} CvStumpTrainParams;
 | 
						|
 | 
						|
typedef struct CvMTStumpTrainParams
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
 | 
						|
    CvStumpType  type;
 | 
						|
    CvStumpError error;
 | 
						|
    int portion; /* number of components calculated in each thread */
 | 
						|
    int numcomp; /* total number of components */
 | 
						|
 | 
						|
    /* callback which fills <mat> with components [first, first+num[ */
 | 
						|
    void (*getTrainData)( CvMat* mat, CvMat* sampleIdx, CvMat* compIdx,
 | 
						|
                          int first, int num, void* userdata );
 | 
						|
    CvMat* sortedIdx; /* presorted samples indices */
 | 
						|
    void* userdata; /* passed to callback */
 | 
						|
} CvMTStumpTrainParams;
 | 
						|
 | 
						|
typedef struct CvStumpClassifier
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_FIELDS()
 | 
						|
    int compidx;
 | 
						|
 | 
						|
    float lerror; /* impurity of the right node */
 | 
						|
    float rerror; /* impurity of the left  node */
 | 
						|
 | 
						|
    float threshold;
 | 
						|
    float left;
 | 
						|
    float right;
 | 
						|
} CvStumpClassifier;
 | 
						|
 | 
						|
typedef struct CvCARTTrainParams
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
 | 
						|
    /* desired number of internal nodes */
 | 
						|
    int count;
 | 
						|
    CvClassifierTrainParams* stumpTrainParams;
 | 
						|
    CvClassifierConstructor  stumpConstructor;
 | 
						|
 | 
						|
    /*
 | 
						|
     * Split sample indices <idx>
 | 
						|
     * on the "left" indices <left> and "right" indices <right>
 | 
						|
     * according to samples components <compidx> values and <threshold>.
 | 
						|
     *
 | 
						|
     * NOTE: Matrices <left> and <right> must be allocated using cvCreateMat function
 | 
						|
     *   since they are freed using cvReleaseMat function
 | 
						|
     *
 | 
						|
     * If it is NULL then the default implementation which evaluates training
 | 
						|
     * samples from <trainData> passed to classifier constructor is used
 | 
						|
     */
 | 
						|
    void (*splitIdx)( int compidx, float threshold,
 | 
						|
                      CvMat* idx, CvMat** left, CvMat** right,
 | 
						|
                      void* userdata );
 | 
						|
    void* userdata;
 | 
						|
} CvCARTTrainParams;
 | 
						|
 | 
						|
typedef struct CvCARTClassifier
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_FIELDS()
 | 
						|
    /* number of internal nodes */
 | 
						|
    int count;
 | 
						|
 | 
						|
    /* internal nodes (each array of <count> elements) */
 | 
						|
    int* compidx;
 | 
						|
    float* threshold;
 | 
						|
    int* left;
 | 
						|
    int* right;
 | 
						|
 | 
						|
    /* leaves (array of <count>+1 elements) */
 | 
						|
    float* val;
 | 
						|
} CvCARTClassifier;
 | 
						|
 | 
						|
CV_BOOST_API
 | 
						|
void cvGetSortedIndices( CvMat* val, CvMat* idx, int sortcols CV_DEFAULT( 0 ) );
 | 
						|
 | 
						|
CV_BOOST_API
 | 
						|
void cvReleaseStumpClassifier( CvClassifier** classifier );
 | 
						|
 | 
						|
CV_BOOST_API
 | 
						|
float cvEvalStumpClassifier( CvClassifier* classifier, CvMat* sample );
 | 
						|
 | 
						|
CV_BOOST_API
 | 
						|
CvClassifier* cvCreateStumpClassifier( CvMat* trainData,
 | 
						|
                                       int flags,
 | 
						|
                                       CvMat* trainClasses,
 | 
						|
                                       CvMat* typeMask,
 | 
						|
                                       CvMat* missedMeasurementsMask CV_DEFAULT(0),
 | 
						|
                                       CvMat* compIdx CV_DEFAULT(0),
 | 
						|
                                       CvMat* sampleIdx CV_DEFAULT(0),
 | 
						|
                                       CvMat* weights CV_DEFAULT(0),
 | 
						|
                                       CvClassifierTrainParams* trainParams CV_DEFAULT(0) );
 | 
						|
 | 
						|
/*
 | 
						|
 * cvCreateMTStumpClassifier
 | 
						|
 *
 | 
						|
 * Multithreaded stump classifier constructor
 | 
						|
 * Includes huge train data support through callback function
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
CvClassifier* cvCreateMTStumpClassifier( CvMat* trainData,
 | 
						|
                                         int flags,
 | 
						|
                                         CvMat* trainClasses,
 | 
						|
                                         CvMat* typeMask,
 | 
						|
                                         CvMat* missedMeasurementsMask,
 | 
						|
                                         CvMat* compIdx,
 | 
						|
                                         CvMat* sampleIdx,
 | 
						|
                                         CvMat* weights,
 | 
						|
                                         CvClassifierTrainParams* trainParams );
 | 
						|
 | 
						|
/*
 | 
						|
 * cvCreateCARTClassifier
 | 
						|
 *
 | 
						|
 * CART classifier constructor
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
CvClassifier* cvCreateCARTClassifier( CvMat* trainData,
 | 
						|
                                      int flags,
 | 
						|
                                      CvMat* trainClasses,
 | 
						|
                                      CvMat* typeMask,
 | 
						|
                                      CvMat* missedMeasurementsMask,
 | 
						|
                                      CvMat* compIdx,
 | 
						|
                                      CvMat* sampleIdx,
 | 
						|
                                      CvMat* weights,
 | 
						|
                                      CvClassifierTrainParams* trainParams );
 | 
						|
 | 
						|
CV_BOOST_API
 | 
						|
void cvReleaseCARTClassifier( CvClassifier** classifier );
 | 
						|
 | 
						|
CV_BOOST_API
 | 
						|
float cvEvalCARTClassifier( CvClassifier* classifier, CvMat* sample );
 | 
						|
 | 
						|
/****************************************************************************************\
 | 
						|
*                                        Boosting                                        *
 | 
						|
\****************************************************************************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * CvBoostType
 | 
						|
 *
 | 
						|
 * The CvBoostType enumeration specifies the boosting type.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *   Four different boosting variants for 2 class classification problems are supported:
 | 
						|
 *   Discrete AdaBoost, Real AdaBoost, LogitBoost and Gentle AdaBoost.
 | 
						|
 *   The L2 (2 class classification problems) and LK (K class classification problems)
 | 
						|
 *   algorithms are close to LogitBoost but more numerically stable than last one.
 | 
						|
 *   For regression three different loss functions are supported:
 | 
						|
 *   Least square, least absolute deviation and huber loss.
 | 
						|
 */
 | 
						|
typedef enum CvBoostType
 | 
						|
{
 | 
						|
    CV_DABCLASS = 0, /* 2 class Discrete AdaBoost           */
 | 
						|
    CV_RABCLASS = 1, /* 2 class Real AdaBoost               */
 | 
						|
    CV_LBCLASS  = 2, /* 2 class LogitBoost                  */
 | 
						|
    CV_GABCLASS = 3, /* 2 class Gentle AdaBoost             */
 | 
						|
    CV_L2CLASS  = 4, /* classification (2 class problem)    */
 | 
						|
    CV_LKCLASS  = 5, /* classification (K class problem)    */
 | 
						|
    CV_LSREG    = 6, /* least squares regression            */
 | 
						|
    CV_LADREG   = 7, /* least absolute deviation regression */
 | 
						|
    CV_MREG     = 8  /* M-regression (Huber loss)           */
 | 
						|
} CvBoostType;
 | 
						|
 | 
						|
/****************************************************************************************\
 | 
						|
*                             Iterative training functions                               *
 | 
						|
\****************************************************************************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * CvBoostTrainer
 | 
						|
 *
 | 
						|
 * The CvBoostTrainer structure represents internal boosting trainer.
 | 
						|
 */
 | 
						|
typedef struct CvBoostTrainer CvBoostTrainer;
 | 
						|
 | 
						|
/*
 | 
						|
 * cvBoostStartTraining
 | 
						|
 *
 | 
						|
 * The cvBoostStartTraining function starts training process and calculates
 | 
						|
 * response values and weights for the first weak classifier training.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   trainClasses
 | 
						|
 *     Vector of classes of training samples classes. Each element must be 0 or 1 and
 | 
						|
 *     of type CV_32FC1.
 | 
						|
 *   weakTrainVals
 | 
						|
 *     Vector of response values for the first trained weak classifier.
 | 
						|
 *     Must be of type CV_32FC1.
 | 
						|
 *   weights
 | 
						|
 *     Weight vector of training samples for the first trained weak classifier.
 | 
						|
 *     Must be of type CV_32FC1.
 | 
						|
 *   type
 | 
						|
 *     Boosting type. CV_DABCLASS, CV_RABCLASS, CV_LBCLASS, CV_GABCLASS
 | 
						|
 *     types are supported.
 | 
						|
 *
 | 
						|
 * Return Values
 | 
						|
 *   The return value is a pointer to internal trainer structure which is used
 | 
						|
 *   to perform next training iterations.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *   weakTrainVals and weights must be allocated before calling the function
 | 
						|
 *   and of the same size as trainingClasses. Usually weights should be initialized
 | 
						|
 *   with 1.0 value.
 | 
						|
 *   The function calculates response values and weights for the first weak
 | 
						|
 *   classifier training and stores them into weakTrainVals and weights
 | 
						|
 *   respectively.
 | 
						|
 *   Note, the training of the weak classifier using weakTrainVals, weight,
 | 
						|
 *   trainingData is outside of this function.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
CvBoostTrainer* cvBoostStartTraining( CvMat* trainClasses,
 | 
						|
                                      CvMat* weakTrainVals,
 | 
						|
                                      CvMat* weights,
 | 
						|
                                      CvMat* sampleIdx,
 | 
						|
                                      CvBoostType type );
 | 
						|
/*
 | 
						|
 * cvBoostNextWeakClassifier
 | 
						|
 *
 | 
						|
 * The cvBoostNextWeakClassifier function performs next training
 | 
						|
 * iteration and caluclates response values and weights for the next weak
 | 
						|
 * classifier training.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   weakEvalVals
 | 
						|
 *     Vector of values obtained by evaluation of each sample with
 | 
						|
 *     the last trained weak classifier (iteration i). Must be of CV_32FC1 type.
 | 
						|
 *   trainClasses
 | 
						|
 *     Vector of classes of training samples. Each element must be 0 or 1,
 | 
						|
 *     and of type CV_32FC1.
 | 
						|
 *   weakTrainVals
 | 
						|
 *     Vector of response values for the next weak classifier training
 | 
						|
 *     (iteration i+1). Must be of type CV_32FC1.
 | 
						|
 *   weights
 | 
						|
 *     Weight vector of training samples for the next weak classifier training
 | 
						|
 *     (iteration i+1). Must be of type CV_32FC1.
 | 
						|
 *   trainer
 | 
						|
 *     A pointer to internal trainer returned by the cvBoostStartTraining
 | 
						|
 *     function call.
 | 
						|
 *
 | 
						|
 * Return Values
 | 
						|
 *   The return value is the coefficient for the last trained weak classifier.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *   weakTrainVals and weights must be exactly the same vectors as used in
 | 
						|
 *   the cvBoostStartTraining function call and should not be modified.
 | 
						|
 *   The function calculates response values and weights for the next weak
 | 
						|
 *   classifier training and stores them into weakTrainVals and weights
 | 
						|
 *   respectively.
 | 
						|
 *   Note, the training of the weak classifier of iteration i+1 using
 | 
						|
 *   weakTrainVals, weight, trainingData is outside of this function.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
float cvBoostNextWeakClassifier( CvMat* weakEvalVals,
 | 
						|
                                 CvMat* trainClasses,
 | 
						|
                                 CvMat* weakTrainVals,
 | 
						|
                                 CvMat* weights,
 | 
						|
                                 CvBoostTrainer* trainer );
 | 
						|
 | 
						|
/*
 | 
						|
 * cvBoostEndTraining
 | 
						|
 *
 | 
						|
 * The cvBoostEndTraining function finishes training process and releases
 | 
						|
 * internally allocated memory.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   trainer
 | 
						|
 *     A pointer to a pointer to internal trainer returned by the cvBoostStartTraining
 | 
						|
 *     function call.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
void cvBoostEndTraining( CvBoostTrainer** trainer );
 | 
						|
 | 
						|
/****************************************************************************************\
 | 
						|
*                                    Boosted tree models                                 *
 | 
						|
\****************************************************************************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * CvBtClassifier
 | 
						|
 *
 | 
						|
 * The CvBtClassifier structure represents boosted tree model.
 | 
						|
 *
 | 
						|
 * Members
 | 
						|
 *   flags
 | 
						|
 *     Flags. If CV_IS_TUNABLE( flags ) != 0 then the model supports tuning.
 | 
						|
 *   eval
 | 
						|
 *     Evaluation function. Returns sample predicted class (0, 1, etc.)
 | 
						|
 *     for classification or predicted value for regression.
 | 
						|
 *   tune
 | 
						|
 *     Tune function. If the model supports tuning then tune call performs
 | 
						|
 *     one more boosting iteration if passed to the function flags parameter
 | 
						|
 *     is CV_TUNABLE otherwise releases internally allocated for tuning memory
 | 
						|
 *     and makes the model untunable.
 | 
						|
 *     NOTE: Since tuning uses the pointers to parameters,
 | 
						|
 *     passed to the cvCreateBtClassifier function, they should not be modified
 | 
						|
 *     or released between tune calls.
 | 
						|
 *   save
 | 
						|
 *     This function stores the model into given file.
 | 
						|
 *   release
 | 
						|
 *     This function releases the model.
 | 
						|
 *   type
 | 
						|
 *     Boosted tree model type.
 | 
						|
 *   numclasses
 | 
						|
 *     Number of classes for CV_LKCLASS type or 1 for all other types.
 | 
						|
 *   numiter
 | 
						|
 *     Number of iterations. Number of weak classifiers is equal to number
 | 
						|
 *     of iterations for all types except CV_LKCLASS. For CV_LKCLASS type
 | 
						|
 *     number of weak classifiers is (numiter * numclasses).
 | 
						|
 *   numfeatures
 | 
						|
 *     Number of features in sample.
 | 
						|
 *   trees
 | 
						|
 *     Stores weak classifiers when the model does not support tuning.
 | 
						|
 *   seq
 | 
						|
 *     Stores weak classifiers when the model supports tuning.
 | 
						|
 *   trainer
 | 
						|
 *     Pointer to internal tuning parameters if the model supports tuning.
 | 
						|
 */
 | 
						|
typedef struct CvBtClassifier
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_FIELDS()
 | 
						|
 | 
						|
    CvBoostType type;
 | 
						|
    int numclasses;
 | 
						|
    int numiter;
 | 
						|
    int numfeatures;
 | 
						|
    union
 | 
						|
    {
 | 
						|
        CvCARTClassifier** trees;
 | 
						|
        CvSeq* seq;
 | 
						|
    };
 | 
						|
    void* trainer;
 | 
						|
} CvBtClassifier;
 | 
						|
 | 
						|
/*
 | 
						|
 * CvBtClassifierTrainParams
 | 
						|
 *
 | 
						|
 * The CvBtClassifierTrainParams structure stores training parameters for
 | 
						|
 * boosted tree model.
 | 
						|
 *
 | 
						|
 * Members
 | 
						|
 *   type
 | 
						|
 *     Boosted tree model type.
 | 
						|
 *   numiter
 | 
						|
 *     Desired number of iterations.
 | 
						|
 *   param
 | 
						|
 *     Parameter   Model Type    Parameter Meaning
 | 
						|
 *     param[0]    Any           Shrinkage factor
 | 
						|
 *     param[1]    CV_MREG       alpha. (1-alpha) determines "break-down" point of
 | 
						|
 *                               the training procedure, i.e. the fraction of samples
 | 
						|
 *                               that can be arbitrary modified without serious
 | 
						|
 *                               degrading the quality of the result.
 | 
						|
 *                 CV_DABCLASS,  Weight trimming factor.
 | 
						|
 *                 CV_RABCLASS,
 | 
						|
 *                 CV_LBCLASS,
 | 
						|
 *                 CV_GABCLASS,
 | 
						|
 *                 CV_L2CLASS,
 | 
						|
 *                 CV_LKCLASS
 | 
						|
 *   numsplits
 | 
						|
 *     Desired number of splits in each tree.
 | 
						|
 */
 | 
						|
typedef struct CvBtClassifierTrainParams
 | 
						|
{
 | 
						|
    CV_CLASSIFIER_TRAIN_PARAM_FIELDS()
 | 
						|
 | 
						|
    CvBoostType type;
 | 
						|
    int numiter;
 | 
						|
    float param[2];
 | 
						|
    int numsplits;
 | 
						|
} CvBtClassifierTrainParams;
 | 
						|
 | 
						|
/*
 | 
						|
 * cvCreateBtClassifier
 | 
						|
 *
 | 
						|
 * The cvCreateBtClassifier function creates boosted tree model.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   trainData
 | 
						|
 *     Matrix of feature values. Must have CV_32FC1 type.
 | 
						|
 *   flags
 | 
						|
 *     Determines how samples are stored in trainData.
 | 
						|
 *     One of CV_ROW_SAMPLE or CV_COL_SAMPLE.
 | 
						|
 *     Optionally may be combined with CV_TUNABLE to make tunable model.
 | 
						|
 *   trainClasses
 | 
						|
 *     Vector of responses for regression or classes (0, 1, 2, etc.) for classification.
 | 
						|
 *   typeMask,
 | 
						|
 *   missedMeasurementsMask,
 | 
						|
 *   compIdx
 | 
						|
 *     Not supported. Must be NULL.
 | 
						|
 *   sampleIdx
 | 
						|
 *     Indices of samples used in training. If NULL then all samples are used.
 | 
						|
 *     For CV_DABCLASS, CV_RABCLASS, CV_LBCLASS and CV_GABCLASS must be NULL.
 | 
						|
 *   weights
 | 
						|
 *     Not supported. Must be NULL.
 | 
						|
 *   trainParams
 | 
						|
 *     A pointer to CvBtClassifierTrainParams structure. Training parameters.
 | 
						|
 *     See CvBtClassifierTrainParams description for details.
 | 
						|
 *
 | 
						|
 * Return Values
 | 
						|
 *   The return value is a pointer to created boosted tree model of type CvBtClassifier.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *     The function performs trainParams->numiter training iterations.
 | 
						|
 *     If CV_TUNABLE flag is specified then created model supports tuning.
 | 
						|
 *     In this case additional training iterations may be performed by
 | 
						|
 *     tune function call.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
CvClassifier* cvCreateBtClassifier( CvMat* trainData,
 | 
						|
                                    int flags,
 | 
						|
                                    CvMat* trainClasses,
 | 
						|
                                    CvMat* typeMask,
 | 
						|
                                    CvMat* missedMeasurementsMask,
 | 
						|
                                    CvMat* compIdx,
 | 
						|
                                    CvMat* sampleIdx,
 | 
						|
                                    CvMat* weights,
 | 
						|
                                    CvClassifierTrainParams* trainParams );
 | 
						|
 | 
						|
/*
 | 
						|
 * cvCreateBtClassifierFromFile
 | 
						|
 *
 | 
						|
 * The cvCreateBtClassifierFromFile function restores previously saved
 | 
						|
 * boosted tree model from file.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   filename
 | 
						|
 *     The name of the file with boosted tree model.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *   The restored model does not support tuning.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
CvClassifier* cvCreateBtClassifierFromFile( const char* filename );
 | 
						|
 | 
						|
/****************************************************************************************\
 | 
						|
*                                    Utility functions                                   *
 | 
						|
\****************************************************************************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * cvTrimWeights
 | 
						|
 *
 | 
						|
 * The cvTrimWeights function performs weight trimming.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   weights
 | 
						|
 *     Weights vector.
 | 
						|
 *   idx
 | 
						|
 *     Indices vector of weights that should be considered.
 | 
						|
 *     If it is NULL then all weights are used.
 | 
						|
 *   factor
 | 
						|
 *     Weight trimming factor. Must be in [0, 1] range.
 | 
						|
 *
 | 
						|
 * Return Values
 | 
						|
 *   The return value is a vector of indices. If all samples should be used then
 | 
						|
 *   it is equal to idx. In other case the cvReleaseMat function should be called
 | 
						|
 *   to release it.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
CvMat* cvTrimWeights( CvMat* weights, CvMat* idx, float factor );
 | 
						|
 | 
						|
/*
 | 
						|
 * cvReadTrainData
 | 
						|
 *
 | 
						|
 * The cvReadTrainData function reads feature values and responses from file.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   filename
 | 
						|
 *     The name of the file to be read.
 | 
						|
 *   flags
 | 
						|
 *     One of CV_ROW_SAMPLE or CV_COL_SAMPLE. Determines how feature values
 | 
						|
 *     will be stored.
 | 
						|
 *   trainData
 | 
						|
 *     A pointer to a pointer to created matrix with feature values.
 | 
						|
 *     cvReleaseMat function should be used to destroy created matrix.
 | 
						|
 *   trainClasses
 | 
						|
 *     A pointer to a pointer to created matrix with response values.
 | 
						|
 *     cvReleaseMat function should be used to destroy created matrix.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *   File format:
 | 
						|
 *   ============================================
 | 
						|
 *   m n
 | 
						|
 *   value_1_1 value_1_2 ... value_1_n response_1
 | 
						|
 *   value_2_1 value_2_2 ... value_2_n response_2
 | 
						|
 *   ...
 | 
						|
 *   value_m_1 value_m_2 ... value_m_n response_m
 | 
						|
 *   ============================================
 | 
						|
 *   m
 | 
						|
 *     Number of samples
 | 
						|
 *   n
 | 
						|
 *     Number of features in each sample
 | 
						|
 *   value_i_j
 | 
						|
 *     Value of j-th feature of i-th sample
 | 
						|
 *   response_i
 | 
						|
 *     Response value of i-th sample
 | 
						|
 *     For classification problems responses represent classes (0, 1, etc.)
 | 
						|
 *   All values and classes are integer or real numbers.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
void cvReadTrainData( const char* filename,
 | 
						|
                      int flags,
 | 
						|
                      CvMat** trainData,
 | 
						|
                      CvMat** trainClasses );
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 * cvWriteTrainData
 | 
						|
 *
 | 
						|
 * The cvWriteTrainData function stores feature values and responses into file.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   filename
 | 
						|
 *     The name of the file.
 | 
						|
 *   flags
 | 
						|
 *     One of CV_ROW_SAMPLE or CV_COL_SAMPLE. Determines how feature values
 | 
						|
 *     are stored.
 | 
						|
 *   trainData
 | 
						|
 *     Feature values matrix.
 | 
						|
 *   trainClasses
 | 
						|
 *     Response values vector.
 | 
						|
 *   sampleIdx
 | 
						|
 *     Vector of idicies of the samples that should be stored. If it is NULL
 | 
						|
 *     then all samples will be stored.
 | 
						|
 *
 | 
						|
 * Remarks
 | 
						|
 *   See the cvReadTrainData function for file format description.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
void cvWriteTrainData( const char* filename,
 | 
						|
                       int flags,
 | 
						|
                       CvMat* trainData,
 | 
						|
                       CvMat* trainClasses,
 | 
						|
                       CvMat* sampleIdx );
 | 
						|
 | 
						|
/*
 | 
						|
 * cvRandShuffle
 | 
						|
 *
 | 
						|
 * The cvRandShuffle function perfroms random shuffling of given vector.
 | 
						|
 *
 | 
						|
 * Parameters
 | 
						|
 *   vector
 | 
						|
 *     Vector that should be shuffled.
 | 
						|
 *     Must have CV_8UC1, CV_16SC1, CV_32SC1 or CV_32FC1 type.
 | 
						|
 */
 | 
						|
CV_BOOST_API
 | 
						|
void cvRandShuffleVec( CvMat* vector );
 | 
						|
 | 
						|
#endif /* _CVCLASSIFIER_H_ */
 |