/** 
* @file FeaturePoolClassifier.h
* @brief abstract interface for a classifier using feature selection
* @author Erik Rodner
* @date 04/21/2008

*/
#ifndef FEATUREPOOLCLASSIFIERINCLUDE
#define FEATUREPOOLCLASSIFIERINCLUDE

#include "vislearning/cbaselib/FeaturePool.h"
#include "vislearning/cbaselib/ClassificationResult.h"
#include "vislearning/cbaselib/CachedExample.h"
#include "vislearning/cbaselib/Example.h"

#include "core/basics/Persistent.h"

namespace OBJREC {

/** abstract interface for a classifier using feature selection */
class FeaturePoolClassifier : public NICE::Persistent
{

    public:
	int maxClassNo;

    public:
  
	/** simple constructor */
	FeaturePoolClassifier( );
   
	/** simple destructor */
	virtual ~FeaturePoolClassifier();
    
	/** more comfortable classification functions for whole images */
	ClassificationResult classify ( const NICE::Image & img );
	ClassificationResult classifyRGB ( const NICE::ColorImage & img );
    
	void setMaxClassNo ( int classno );       
	int getMaxClassNo () const;  

	/** classification */
	virtual ClassificationResult classify ( Example & pe ) = 0;

	/** training process */
	virtual void train ( FeaturePool & fp, Examples & examples ) = 0;

	/** clone this object */
	virtual FeaturePoolClassifier *clone () const = 0;

	/** set complexity for the next training process e.g. number of weak classifiers */
	virtual void setComplexity ( int size );
  
  /** add multiple examples given in the OBJREC::Examples data structure*/
  virtual void addMultipleExamples( OBJREC::Examples & newExamples);

};


} // namespace

#endif