/** 
* @file HOGFeature.h
* @brief histogram of oriented gradients ( dalal and triggs )
* @author Erik Rodner
* @date 05/07/2008

*/
#ifndef HOGFeatureINCLUDE
#define HOGFeatureINCLUDE

#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"
 
#include "core/basics/Config.h"
#include "vislearning/cbaselib/Feature.h"


namespace OBJREC {

/** histogram of oriented gradients ( dalal and triggs ) */
class HOGFeature : public Feature
{

    protected:

	/** @{ feature parameter */
	int window_size_x;
	int window_size_y;

	int bin;
	int cellx1;
	int celly1;
	int cellx2;
	int celly2;
	int cellcountx;
	int cellcounty;

	bool flexibleGrid;

	/** @} */

	/** @{ parameter for feature generation */
	int numScales;
	int numBins;
	double scaleStep;
	/** @} */

    public:
  
	/** simple constructor */
	HOGFeature( const NICE::Config *conf );

	/** internally used by HOGFeature::explode */
	HOGFeature () {};
      
	/** simple destructor */
	virtual ~HOGFeature();
     
	double val( const Example *example ) const;
	void explode ( FeaturePool & featurePool, bool variableWindow = true ) const;
	Feature *clone() const;
	Feature *generateFirstParameter () const;

	void restore (std::istream & is, int format = 0);
	void store (std::ostream & os, int format = 0) const;
	void clear ();
};




} // namespace

#endif
