Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkSlicedVolumeGeneratorTest.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 #include <mitkTestFixture.h>
13 #include <mitkTestingMacros.h>
14 
16 
17 class mitkSlicedVolumeGeneratorTestSuite : public mitk::TestFixture
18 {
19  CPPUNIT_TEST_SUITE(mitkSlicedVolumeGeneratorTestSuite);
20  MITK_TEST(testConstructorDestructor);
21  MITK_TEST(testGetSlicedFluenceVolume);
22  MITK_TEST(testGetSlicedFluenceVolumeInverse);
23  MITK_TEST(testGetSlicedFluenceVolumeWithPrecorrection);
24  MITK_TEST(testGetSlicedFluenceVolumeWithPrecorrectionInverse);
25  MITK_TEST(testGetSlicedSignalVolume);
26  MITK_TEST(testGetSlicedAbsorptionVolume);
27  CPPUNIT_TEST_SUITE_END();
28 
29 private:
30 
31  mitk::pa::ComposedVolume::Pointer m_ComposedVolume;
32  mitk::pa::TissueGeneratorParameters::Pointer m_DefaultParameters;
33  mitk::pa::InSilicoTissueVolume::Pointer m_InSilicoTissueVolume;
34  mitk::pa::SlicedVolumeGenerator::Pointer m_SlicedVolumeGenerator;
35  mitk::pa::Volume::Pointer m_PrecorrectionVolume;
36 
37 public:
38 
39  void setUp() override
40  {
41  m_SlicedVolumeGenerator = nullptr;
42  m_DefaultParameters = mitk::pa::TissueGeneratorParameters::New();
43  m_DefaultParameters->SetXDim(3);
44  m_DefaultParameters->SetYDim(3);
45  m_DefaultParameters->SetZDim(3);
46  auto rng = std::mt19937();
47  m_InSilicoTissueVolume = mitk::pa::InSilicoTissueVolume::New(m_DefaultParameters, &rng);
48  m_ComposedVolume = mitk::pa::ComposedVolume::New(m_InSilicoTissueVolume);
49  m_ComposedVolume->AddSlice(CreateValidationPair(-1, 1));
50  m_ComposedVolume->AddSlice(CreateValidationPair(0, 3));
51  m_ComposedVolume->AddSlice(CreateValidationPair(1, 6));
52  m_PrecorrectionVolume = CreatePrecorrectionVolume();
53  }
54 
55  mitk::pa::Volume::Pointer CreatePrecorrectionVolume()
56  {
57  auto* data = new double[27];
58  for (int i = 0; i < 27; ++i)
59  data[i] = 0.5;
60  return mitk::pa::Volume::New(data, 3, 3, 3, 1);
61  }
62 
63  void FillYSliceWith(mitk::pa::Volume::Pointer fluenceVolume, double ySlice, double value)
64  {
65  for (unsigned int x = 0; x < fluenceVolume->GetXDim(); ++x)
66  for (unsigned int z = 0; z < fluenceVolume->GetZDim(); ++z)
67  {
68  fluenceVolume->SetData(value, x, ySlice, z);
69  }
70  }
71 
72  mitk::pa::FluenceYOffsetPair::Pointer CreateValidationPair(double yOffset, int start)
73  {
74  auto* data = new double[27];
75  mitk::pa::Volume::Pointer fluenceVolume = mitk::pa::Volume::New(data, 3, 3, 3, 1);
76 
77  FillYSliceWith(fluenceVolume, 0, start + 0);
78  FillYSliceWith(fluenceVolume, 1, start + 1);
79  FillYSliceWith(fluenceVolume, 2, start + 2);
80 
81  return mitk::pa::FluenceYOffsetPair::New(fluenceVolume, yOffset);
82  }
83 
84  void AssertYSliceValue(mitk::pa::Volume::Pointer fluenceVolume, double ySlice, double value)
85  {
86  for (unsigned int x = 0; x < fluenceVolume->GetXDim(); ++x)
87  for (unsigned int z = 0; z < fluenceVolume->GetZDim(); ++z)
88  {
89  std::string msg = "Expected: " + std::to_string(value) + " actual: " + std::to_string(fluenceVolume->GetData(x, ySlice, z));
90  CPPUNIT_ASSERT_MESSAGE(msg, std::abs(fluenceVolume->GetData(x, ySlice, z) - value) < mitk::eps);
91  }
92  }
93 
94  void testConstructorDestructor()
95  {
96  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(0, false, nullptr, false);
97  CPPUNIT_ASSERT(m_SlicedVolumeGenerator.IsNotNull());
98  }
99 
100  void testGetSlicedFluenceVolume()
101  {
102  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(1, false, nullptr, false);
103  mitk::pa::Volume::Pointer slicedFluence =
104  m_SlicedVolumeGenerator->GetSlicedFluenceImageFromComposedVolume(m_ComposedVolume);
105  CPPUNIT_ASSERT(slicedFluence->GetXDim() == 3);
106  CPPUNIT_ASSERT(slicedFluence->GetYDim() == 3);
107  CPPUNIT_ASSERT(slicedFluence->GetZDim() == 3);
108  AssertYSliceValue(slicedFluence, 0, 1);
109  AssertYSliceValue(slicedFluence, 1, 4);
110  AssertYSliceValue(slicedFluence, 2, 8);
111  }
112 
113  void testGetSlicedFluenceVolumeInverse()
114  {
115  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(1, false, nullptr, true);
116  mitk::pa::Volume::Pointer slicedFluence =
117  m_SlicedVolumeGenerator->GetSlicedFluenceImageFromComposedVolume(m_ComposedVolume);
118  CPPUNIT_ASSERT(slicedFluence->GetXDim() == 3);
119  CPPUNIT_ASSERT(slicedFluence->GetYDim() == 3);
120  CPPUNIT_ASSERT(slicedFluence->GetZDim() == 3);
121  AssertYSliceValue(slicedFluence, 0, 1);
122  AssertYSliceValue(slicedFluence, 1, 1.0 / 4.0);
123  AssertYSliceValue(slicedFluence, 2, 1.0 / 8.0);
124  }
125 
126  void testGetSlicedFluenceVolumeWithPrecorrection()
127  {
128  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(1, true, m_PrecorrectionVolume, false);
129  mitk::pa::Volume::Pointer slicedFluence =
130  m_SlicedVolumeGenerator->GetSlicedFluenceImageFromComposedVolume(m_ComposedVolume);
131  CPPUNIT_ASSERT(slicedFluence->GetXDim() == 3);
132  CPPUNIT_ASSERT(slicedFluence->GetYDim() == 3);
133  CPPUNIT_ASSERT(slicedFluence->GetZDim() == 3);
134  AssertYSliceValue(slicedFluence, 0, 2);
135  AssertYSliceValue(slicedFluence, 1, 8);
136  AssertYSliceValue(slicedFluence, 2, 16);
137  }
138 
139  void testGetSlicedFluenceVolumeWithPrecorrectionInverse()
140  {
141  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(1, true, m_PrecorrectionVolume, true);
142  mitk::pa::Volume::Pointer slicedFluence =
143  m_SlicedVolumeGenerator->GetSlicedFluenceImageFromComposedVolume(m_ComposedVolume);
144  CPPUNIT_ASSERT(slicedFluence->GetXDim() == 3);
145  CPPUNIT_ASSERT(slicedFluence->GetYDim() == 3);
146  CPPUNIT_ASSERT(slicedFluence->GetZDim() == 3);
147  AssertYSliceValue(slicedFluence, 0, 1.0 / 2);
148  AssertYSliceValue(slicedFluence, 1, 1.0 / 8);
149  AssertYSliceValue(slicedFluence, 2, 1.0 / 16);
150  }
151 
152  void testGetSlicedSignalVolume()
153  {
154  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(1, false, nullptr, false);
155  mitk::pa::Volume::Pointer slicedFluence =
156  m_SlicedVolumeGenerator->GetSlicedSignalImageFromComposedVolume(m_ComposedVolume);
157  CPPUNIT_ASSERT(slicedFluence->GetXDim() == 3);
158  CPPUNIT_ASSERT(slicedFluence->GetYDim() == 3);
159  CPPUNIT_ASSERT(slicedFluence->GetZDim() == 3);
160  AssertYSliceValue(slicedFluence, 0, 1 * m_DefaultParameters->GetMinBackgroundAbsorption());
161  AssertYSliceValue(slicedFluence, 1, 4 * m_DefaultParameters->GetMinBackgroundAbsorption());
162  AssertYSliceValue(slicedFluence, 2, 8 * m_DefaultParameters->GetMinBackgroundAbsorption());
163  }
164 
165  void testGetSlicedAbsorptionVolume()
166  {
167  m_SlicedVolumeGenerator = mitk::pa::SlicedVolumeGenerator::New(1, false, nullptr, false);
168  mitk::pa::Volume::Pointer slicedFluence =
169  m_SlicedVolumeGenerator->GetSlicedGroundTruthImageFromComposedVolume(m_ComposedVolume);
170  CPPUNIT_ASSERT(slicedFluence->GetXDim() == 3);
171  CPPUNIT_ASSERT(slicedFluence->GetYDim() == 3);
172  CPPUNIT_ASSERT(slicedFluence->GetZDim() == 3);
173  AssertYSliceValue(slicedFluence, 0, m_DefaultParameters->GetMinBackgroundAbsorption());
174  AssertYSliceValue(slicedFluence, 1, m_DefaultParameters->GetMinBackgroundAbsorption());
175  AssertYSliceValue(slicedFluence, 2, m_DefaultParameters->GetMinBackgroundAbsorption());
176  }
177 
178  void tearDown() override
179  {
180  m_SlicedVolumeGenerator = nullptr;
181  }
182 };
183 
184 MITK_TEST_SUITE_REGISTRATION(mitkSlicedVolumeGenerator)
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
float yOffset
Definition: MitkMCxyz.cpp:622
static InSilicoTissueVolume::Pointer New(mitk::pa::Volume::Pointer absorptionVolume, Volume::Pointer scatteringVolume, Volume::Pointer anisotropyVolume, Volume::Pointer segmentationVolume, TissueGeneratorParameters::Pointer tissueParameters, mitk::PropertyList::Pointer propertyList)
Test fixture for parameterized tests.
MITKCORE_EXPORT const ScalarType eps
static Volume::Pointer New(double *data, unsigned int xDim, unsigned int yDim, unsigned int zDim, double spacing)
returns smartpointer reference to a new instance of this objects. The given data array will be freed ...