PCA.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * @file PCA.h
  3. * @brief extract fourier domain value
  4. * @author Michael Koch
  5. * @date 5/27/2008
  6. */
  7. #ifndef PCAINCLUDE
  8. #define PCAINCLUDE
  9. #include "core/image/Filter.h"
  10. #include "core/vector/VectorT.h"
  11. #include "core/vector/MatrixT.h"
  12. #include "vislearning/math/ftransform/FTransform.h"
  13. namespace OBJREC {
  14. /** extract PCA features */
  15. class PCA: public FTransform
  16. {
  17. protected:
  18. NICE::Vector mean;
  19. NICE::Matrix basis;
  20. NICE::Matrix normbasis;
  21. NICE::Matrix normalization;
  22. uint targetDimension;
  23. uint maxiteration;
  24. double mindelta;
  25. public:
  26. PCA (uint dim,uint maxiteration=100,double mindelta=1e-4);
  27. PCA (void);
  28. NICE::Matrix getBasis();
  29. NICE::Vector getMean();
  30. void restore (std::istream & is, int format = 0);
  31. void store (std::ostream & os, int format = 0) const;
  32. void clear ();
  33. /**
  34. * get Basis Vectors of PCA
  35. * @param features Input Features
  36. * @param dimension Dimension size / number of principal components
  37. * @param mode Algorithm mode 0=SVD 1=Arnoldi
  38. * @return Basis Vectors
  39. */
  40. void calculateBasis(const NICE::Matrix &features,const uint targetDimension,const uint mode=0);
  41. void calculateBasis(const NICE::Matrix &features,const uint targetDimension,const uint mode,const bool adaptive,const double targetRatio=1.0);
  42. /**
  43. * returns the dimension of the transformed features
  44. * @return feature dim
  45. */
  46. int getTargetDim();
  47. /**
  48. * get Features in PCA Space
  49. * @param data input data
  50. * @param normalize normalisation switch
  51. * @return Features as Vector
  52. */
  53. NICE::Vector getFeatureVector(const NICE::Vector &data,const bool normalize=true);
  54. ~PCA();
  55. private:
  56. void init (uint dim=10,uint maxiteration=100,double mindelta=1e-4);
  57. };
  58. } // namespace
  59. #endif