Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkCovarianceMatrixCalculatorTest.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 #include <mitkIOUtil.h>
15 #include <mitkSurface.h>
16 #include <mitkTestingMacros.h>
17 #include <mitkVector.h>
18 #include <vtkCleanPolyData.h>
19 
20 #include <mitkTestFixture.h>
21 
25 class mitkCovarianceMatrixCalculatorTestSuite : public mitk::TestFixture
26 {
27  CPPUNIT_TEST_SUITE(mitkCovarianceMatrixCalculatorTestSuite);
28  MITK_TEST(testCovarianceMatrixCalculation_CM_PCA);
29  CPPUNIT_TEST_SUITE_END();
30 
31 private:
32  typedef itk::Matrix<double, 3, 3> CovarianceMatrix;
33  typedef std::vector<CovarianceMatrix> CovarianceMatrixList;
34 
35  mitk::Surface::Pointer m_Surface;
36  CovarianceMatrixList m_Reference;
37 
38 public:
39  void setUp() override
40  {
41  m_Surface = mitk::IOUtil::Load<mitk::Surface>(GetTestDataFilePath("RenderingTestData/Stanford_bunny.stl"));
42 
43  // saved results
44  CovarianceMatrix m1, m2, m3;
45 
46  // set 3 reference results into the vector. The first in the array, one from
47  // the middle and the last one
48  m1[0][0] = 366.169;
49  m1[1][0] = 39.5242;
50  m1[2][0] = 102.368;
51  m1[0][1] = 39.5242;
52  m1[1][1] = 6.97979;
53  m1[2][1] = 6.91726;
54  m1[0][2] = 102.368;
55  m1[1][2] = 6.91726;
56  m1[2][2] = 389.481;
57  m_Reference.push_back(m1);
58 
59  m2[0][0] = 107.999;
60  m2[1][0] = 71.6708;
61  m2[2][0] = -0.908269;
62  m2[0][1] = 71.6708;
63  m2[1][1] = 133.407;
64  m2[2][1] = 40.8706;
65  m2[0][2] = -0.908269;
66  m2[1][2] = 40.8706;
67  m2[2][2] = 25.1825;
68  m_Reference.push_back(m2);
69 
70  m3[0][0] = 177.916;
71  m3[1][0] = 4.92498;
72  m3[2][0] = 5.86319;
73  m3[0][1] = 4.92498;
74  m3[1][1] = 0.214147;
75  m3[2][1] = -1.98345;
76  m3[0][2] = 5.86319;
77  m3[1][2] = -1.98345;
78  m3[2][2] = 232.092;
79  m_Reference.push_back(m3);
80  }
81 
82  void tearDown() override
83  {
84  m_Surface = nullptr;
85  m_Reference.clear();
86  }
87 
88  void testCovarianceMatrixCalculation_CM_PCA()
89  {
90  mitk::CovarianceMatrixCalculator::Pointer matrixCalculator = mitk::CovarianceMatrixCalculator::New();
91  matrixCalculator->SetInputSurface(m_Surface);
92  matrixCalculator->ComputeCovarianceMatrices();
93  CovarianceMatrixList result = matrixCalculator->GetCovarianceMatrices();
94 
95  CPPUNIT_ASSERT_MESSAGE("mitkCovarianceMatrixCalculatorTestSuite test first matrix",
96  mitk::MatrixEqualElementWise(result.at(0), m_Reference.at(0), 0.001));
97 
98  CPPUNIT_ASSERT_MESSAGE("mitkCovarianceMatrixCalculatorTestSuite test middle matrix",
99  mitk::MatrixEqualElementWise(result.at(result.size() / 2), m_Reference.at(1), 0.001));
100 
101  CPPUNIT_ASSERT_MESSAGE("mitkCovarianceMatrixCalculatorTestSuite test last matrix",
102  mitk::MatrixEqualElementWise(result.at((result.size() - 1)), m_Reference.at(2), 0.001));
103  }
104 };
105 
106 MITK_TEST_SUITE_REGISTRATION(mitkCovarianceMatrixCalculator)
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
bool MatrixEqualElementWise(const vnl_matrix_fixed< TCoordRep, NRows, NCols > &matrix1, const vnl_matrix_fixed< TCoordRep, NRows, NCols > &matrix2, mitk::ScalarType epsilon=mitk::eps)
Check for element-wise matrix equality with a user defined accuracy.
Definition: mitkMatrix.h:140
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
static std::string GetTestDataFilePath(const std::string &testData)
Get the absolute path for test data.
Test fixture for parameterized tests.