TestFTransform.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // C++ Implementation: TestFTransform
  3. //
  4. // Description:
  5. //
  6. //
  7. // Author: Michael Koch <Koch.Michael@uni-jena.de>, (C) 2009
  8. //
  9. // Copyright: See COPYING file that comes with this distribution
  10. //
  11. /**
  12. * @file TestFTransform.cpp
  13. * @brief TestFTransform
  14. * @author Michael Koch
  15. * @date Di Aug 4 2009
  16. */
  17. #include "TestFTransform.h"
  18. #include <string>
  19. #include "core/basics/cppunitex.h"
  20. #include "core/basics/numerictools.h"
  21. #include "core/vector/Distance.h"
  22. #include "vislearning/math/ftransform/FTransform.h"
  23. #include "vislearning/math/ftransform/PCA.h"
  24. using namespace std;
  25. using namespace NICE;
  26. using namespace OBJREC;
  27. CPPUNIT_TEST_SUITE_REGISTRATION ( TestFTransform );
  28. void TestFTransform::setUp()
  29. {
  30. }
  31. void TestFTransform::tearDown()
  32. {
  33. }
  34. void TestFTransform::TestFTransformComputation()
  35. {
  36. uint samplecount = 13; //samples
  37. uint sampledimension = 4; //sample dimension
  38. NICE::Matrix T ( samplecount, sampledimension );
  39. NICE::Matrix goalBasis ( sampledimension, sampledimension );
  40. NICE::Matrix goalFeats ( samplecount, sampledimension );
  41. //trivial test
  42. CPPUNIT_ASSERT_EQUAL ( samplecount, ( uint ) T.rows() );
  43. CPPUNIT_ASSERT_EQUAL ( sampledimension, ( uint ) T.cols() );
  44. ifstream is ( "./pca.data" );
  45. for ( uint i = 0 ; i < T.rows() ; i++ )
  46. for ( uint j = 0 ; j < T.cols() ; j++ )
  47. is >> T ( i, j );
  48. for ( uint i = 0 ; i < goalBasis.rows() ; i++ )
  49. for ( uint j = 0 ; j < goalBasis.cols() ; j++ )
  50. is >> goalBasis ( i, j );
  51. for ( uint i = 0 ; i < goalFeats.rows() ; i++ )
  52. for ( uint j = 0 ; j < goalFeats.cols() ; j++ )
  53. is >> goalFeats ( i, j );
  54. is.close();
  55. PCA *ftransform = new PCA ( sampledimension );
  56. bool mode = false;
  57. ftransform->calculateBasis ( T, sampledimension, mode ); //fastes available method
  58. NICE::Matrix basis, featurematrix;
  59. featurematrix = T;
  60. //cout << featurematrix << endl;
  61. basis = ftransform->getBasis();
  62. //cout<<basis<<endl;
  63. //orthogonality test
  64. for ( uint i = 0 ; i < goalBasis.rows() ; i++ )
  65. for ( uint j = 0 ; j < goalBasis.cols() ; j++ )
  66. {
  67. CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN ( abs ( goalBasis ( i, j ) ), abs ( basis ( i, j ) ), 1e-4 );
  68. }
  69. //transform features and test
  70. for ( uint k = 0;k < T.rows();k++ )
  71. {
  72. NICE::Vector feature, feature_transformed;
  73. feature = T.getRow ( k );
  74. feature_transformed = ftransform-> getFeatureVector ( feature, false );
  75. for ( uint d = 0;d < feature_transformed.size();d++ )
  76. {
  77. featurematrix ( k, d ) = feature_transformed[d];
  78. }
  79. }
  80. for ( uint i = 0 ; i < goalFeats.rows() ; i++ )
  81. for ( uint j = 0 ; j < goalFeats.cols() ; j++ )
  82. {
  83. CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN ( abs ( goalFeats ( i, j ) ), abs ( featurematrix ( i, j ) ), 1e-2 );
  84. }
  85. }