/** 
* @file LocalFeatureLFInterface.h
* @brief Interface to use a LocalFeature (Descriptor only) with routines of LocalFeatureRepresentations (Detector + Descriptor)
* @author Björn Fröhlich
* @date 09/07/2010

*/
#ifndef LocalFeatureLFInterfaceINCLUDE
#define LocalFeatureLFInterfaceINCLUDE

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

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


namespace OBJREC {


  /** @class LocalFeatureLFInterface
  * @brief Interface to use a LocalFeature (Descriptor only) with routines of LocalFeatureRepresentations (Detector + Descriptor)
  *
  */  
  class LocalFeatureLFInterface : public LocalFeature
  {

      protected:
      LocalFeatureRepresentation *lfpres;

      public:
    
    /** simple constructor */
      LocalFeatureLFInterface ( const NICE::Config *conf, LocalFeatureRepresentation *_lfpres );
        
    /** simple destructor */

    virtual ~LocalFeatureLFInterface();
    
    /**
    * @brief returns the size of each the SIFT-Feature
    */
    int getDescSize() const { return lfpres->getDescSize(); };
    
    /** 
    * @brief get the descriptor
    * @param img input image
    * @param positions positions for local features
    * @param descriptors output
    * @return 0
    */
    int getDescriptors ( const NICE::Image & img, NICE::VVector & positions, NICE::VVector & descriptors ) const;
    
    /** 
    * @brief get the descriptor
    * @param img input color image
    * @param positions positions for the SIFT features
    * @param descriptors output
    * @return 0
    */
    int getDescriptors ( const NICE::ColorImage & img, NICE::VVector & positions, NICE::VVector & descriptors) const;
              
    void visualizeFeatures ( NICE::Image & mark, const NICE::VVector & positions, size_t color ) const;

      
  };


} // namespace

#endif
