/**
 * @file FeatureLearningClusterBased.h
 * @brief compute new histogram entries by clustering new features and take centers of clusters which are relevant and novel
 * @author Alexander Freytag
 * @date 16-04-2013 (dd-mm-yyyy)
*/
#ifndef _INCLUDEFEATURELEARNINGCLUSTERBASED
#define _INCLUDEFEATURELEARNINGCLUSTERBASED

#include "FeatureLearningPrototypes.h"

#include <string>


namespace OBJREC
{

  /**
   * @class FeatureLearningClusterBased
   * @brief compute new histogram entries by clustering new features and take centers of clusters which are relevant and novel
   * @author Alexander Freytag
   * @date 16-04-2013 (dd-mm-yyyy)
  */  
  
  class FeatureLearningClusterBased : public FeatureLearningPrototypes
  {

    protected:
           
      /************************
       * 
       *   protected variables
       * 
       **************************/       
      
       //! define the number of clusters we want to compute for an unseen image
      int numberOfClustersForNewImage;      

      /************************
       * 
       *   protected methods
       * 
       **************************/  
      
      void setClusterAlgo( const std::string & _clusterAlgoString, const bool & _setForInitialTraining);


    public:

      /** constructor
        *  @param _conf needs a configfile
        *  @param _md and a MultiDataset (contains images and other things)
        */
      FeatureLearningClusterBased ( const NICE::Config *_conf, const OBJREC::MultiDataset *_md , const std::string & _section = "featureLearning");

      /** simple destructor */
      virtual ~FeatureLearningClusterBased();
      
      /** this function has to be overloaded by all subclasses
          @param imgWithNovelContent 
      */
      virtual void learnNewFeatures ( const std::string & filename ) ;      

  };


} // namespace

#endif
