/** 
* @file GSCluster.h
* @brief Generate Signature by Clustering Local Features (image-specific codebook!). The class can be used for the EMD kernel, but not for usual BoV approaches.
* @author Erik Rodner
* @date 10/30/2007

*/
#ifndef GSCLUSTERINCLUDE
#define GSCLUSTERINCLUDE

#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"
  
#include "GenerateSignature.h"
#include "ClusterAlgorithm.h"


namespace OBJREC {

    /** 
     * @class GSCluster
     * @brief Generate Signature by Clustering Local Features (image-specific codebook!).
     * The class can be used for the EMD kernel, but not for usual BoV approaches.
     * @author Erik Rodner
     */
    class GSCluster : public GenerateSignature
    {

        protected:
          int c_no_clusters;

          ClusterAlgorithm *clualg;

        public:
      
          /** standard  constructor
           * @param conf config file specifying all relevant variable settings.  You should specify in "section" the string "cluster_method"
           * @param _section name of the section within the configfile where the settings can be found. Default: GSCluster
           * @param[in] 
           */
          GSCluster( const NICE::Config *conf, const std::string & _section = "GSCluster" );
              
          /** simple destructor */
          virtual ~GSCluster();
            
          void signature ( const NICE::VVector & features,
              NICE::Vector & signature );
    };


} // namespace

#endif
