/** 
* @file FTransform.h
* @brief FTransform Class Definition
* @author Michael Koch
* @date 08/19/2008

*/
#ifndef FTRANSFORMINCLUDE
#define FTRANSFORMINCLUDE

#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"
#include "core/basics/Persistent.h"

namespace OBJREC {

/** Abstract class for feature transformations */
class FTransform: public NICE::Persistent
{

    protected:

    public:
  
	/** simple constructor */
	FTransform();
      
	/** simple destructor */
	virtual ~FTransform();
        
       
          /**
         * Whitening of a dataset
         * @param features feature Matrix
         * @param whitefeatures feature Matrix after whitening
         * @param whitefeatures feature NICE::Matrix after whitening
           */
        void whitening(const NICE::Matrix &features,NICE::Matrix &whitefeatures);

        
          /**
         * get Basis Vectors of FTransform
         * @param features Input Features
         * @param dimension Dimension size / number of principal components 
         * @return Basis Vectors 
           */
        virtual void calculateBasis(const NICE::Matrix &features,const uint targetDimension=10,const uint mode=0)=0;
          
          /**
         * Features of FTransform Space
         * @param basis Base coefficients 
         * @param data input data
         * @return Features as Vector
           */
        virtual NICE::Vector getFeatureVector(const NICE::Vector &data,const bool normalize=true)=0;
    
          

};


} // namespace

#endif
