/**
* @file LFColorSande.h
* @brief interface to ColorSande implementation
* @author Erik Rodner
* @date 11/19/2007

*/
#ifndef LFColorSandeINCLUDE
#define LFColorSandeINCLUDE

#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"
#include "core/image/ImageT.h"

#include "LocalFeatureRepresentation.h"
#include "core/basics/Config.h"


namespace OBJREC {

/** interface to ColorSande implementation */
class LFColorSande : public LocalFeatureRepresentation
{

  protected:
    std::string c_binaryExecutable;
    std::string c_params;
    double c_minScale;

    //! size of the descriptor
    int descriptor_size;

    //! use grid for SIFT Positions
    bool usegrid;

    //! size of the grid
    std::string gridsize;

    //! used scales
    std::string scales;

  public:

    /** simple constructor */
    LFColorSande ( const NICE::Config *conf, std::string section = "LFColorSande" );

    /** simple destructor */
    virtual ~LFColorSande();

    int getDescSize () const;

    /**
     * get the colorSIFT features
     * @param img grayvalue input image
     * @param features features (output)
     * @param positions position of the features
     * @return
     */
    int extractFeatures ( const NICE::Image & img, NICE::VVector & features,
                          NICE::VVector & positions ) const;

    /**
     * get the colorSIFT features
     * @param img color input image
     * @param features features (output)
     * @param positions position of the features
     * @return
     */
    int extractFeatures ( const NICE::ColorImage & img, NICE::VVector & features,
                          NICE::VVector & positions ) const;

};


} // namespace

#endif
