Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkPhotoacousticVolumeTest.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 
13 #include <mitkTestFixture.h>
14 #include <mitkTestingMacros.h>
15 
16 #include <mitkImageReadAccessor.h>
17 
20 
21 class mitkPhotoacousticVolumeTestSuite : public mitk::TestFixture
22 {
23  CPPUNIT_TEST_SUITE(mitkPhotoacousticVolumeTestSuite);
24  MITK_TEST(TestUniformDistributionIsUniform);
25  MITK_TEST(TestInitializedTissueContainsOnlyZeros);
26  MITK_TEST(TestConvertedMitkImageContainsOnlyZerosOrAir);
27  MITK_TEST(TestTissueVolumeContainsCorrectAbsorptionNumber);
28  MITK_TEST(TestTissueVolumeContainsCorrectScatteringNumber);
29  MITK_TEST(TestTissueVolumeContainsCorrectAnisotropyNumber);
30  MITK_TEST(testSecondConstructor);
31  MITK_TEST(testCompleteAirVoxelInclusion);
32  MITK_TEST(testHalfAirVoxelInclusion);
33  MITK_TEST(testCompleteAirAndSkinVoxelInclusion);
34  MITK_TEST(testRandomizeCoefficients);
35  CPPUNIT_TEST_SUITE_END();
36 
37 private:
38 
39  mitk::pa::InSilicoTissueVolume::Pointer m_PhotoacousticVolume;
40  mitk::pa::TissueGeneratorParameters::Pointer m_TissueGeneratorParameters;
41 
42 public:
43 
44  void setUp() override
45  {
46  m_TissueGeneratorParameters = mitk::pa::TissueGeneratorParameters::New();
47  auto rng = std::mt19937();
48  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
49  }
50 
51  void TestUniformDistributionIsUniform()
52  {
53 
54  int dims = 30;
55  m_TissueGeneratorParameters->SetXDim(dims);
56  m_TissueGeneratorParameters->SetYDim(dims);
57  m_TissueGeneratorParameters->SetZDim(dims);
58  m_TissueGeneratorParameters->SetAirThicknessInMillimeters(0);
59 
60  m_TissueGeneratorParameters->SetMinBackgroundAbsorption(0.001);
61  m_TissueGeneratorParameters->SetMaxBackgroundAbsorption(0.2);
62 
63  auto rng = std::mt19937();
64  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
65 
66  for (int x = 0; x < dims; x++)
67  {
68  for (int y = 0; y < dims; y++)
69  {
70  for (int z = 0; z < dims; z++)
71  {
72  CPPUNIT_ASSERT_EQUAL_MESSAGE("Every absorption should be in bounds.",
73  m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(x, y, z) >= 0.001 &&
74  m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(x, y, z) <= 0.2, true);
75  }
76  }
77  }
78 
79  }
80 
81  void TestInitializedTissueContainsOnlyZeros()
82  {
83  int dims = 30;
84  m_TissueGeneratorParameters->SetXDim(dims);
85  m_TissueGeneratorParameters->SetYDim(dims);
86  m_TissueGeneratorParameters->SetZDim(dims);
87  m_TissueGeneratorParameters->SetAirThicknessInMillimeters(0);
88  m_TissueGeneratorParameters->SetMinBackgroundAbsorption(0);
89  m_TissueGeneratorParameters->SetMaxBackgroundAbsorption(0);
90  auto rng = std::mt19937();
91  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
92 
93  for (int x = 0; x < dims; x++)
94  {
95  for (int y = 0; y < dims; y++)
96  {
97  for (int z = 0; z < dims; z++)
98  {
99  CPPUNIT_ASSERT_EQUAL_MESSAGE("Every field should be initialized with 0.", std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(x, y, z)) < mitk::eps, true);
100  }
101  }
102  }
103  }
104 
105  void TestConvertedMitkImageContainsOnlyZerosOrAir()
106  {
107  int dims = 30;
108  m_TissueGeneratorParameters->SetXDim(dims);
109  m_TissueGeneratorParameters->SetYDim(dims);
110  m_TissueGeneratorParameters->SetZDim(dims);
111  auto rng = std::mt19937();
112  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
113 
114  mitk::Image::Pointer testImage = m_PhotoacousticVolume->ConvertToMitkImage();
115 
116  mitk::ImageReadAccessor imgMemAcc(testImage);
117  auto* imagePointer = (double*)imgMemAcc.GetData();
118 
119  for (int index = 0; index < dims*dims*dims; index++, imagePointer++)
120  {
121  CPPUNIT_ASSERT_EQUAL_MESSAGE("Every voxel in image should be 0.1 or 0.0001.", true, std::abs(*imagePointer - 0.1) <= mitk::eps || std::abs(*imagePointer - 0.0001) <= mitk::eps);
122  }
123  }
124 
125  void TestTissueVolumeContainsCorrectAbsorptionNumber()
126  {
127  int dims = 2;
128  m_TissueGeneratorParameters->SetXDim(dims);
129  m_TissueGeneratorParameters->SetYDim(dims);
130  m_TissueGeneratorParameters->SetZDim(dims);
131  auto rng = std::mt19937();
132  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
133 
134  m_PhotoacousticVolume->SetVolumeValues(0, 0, 0, 0, 0, 0);
135  m_PhotoacousticVolume->SetVolumeValues(0, 0, 1, 1, 0, 0);
136  m_PhotoacousticVolume->SetVolumeValues(0, 1, 0, 2, 0, 0);
137  m_PhotoacousticVolume->SetVolumeValues(0, 1, 1, 3, 0, 0);
138  m_PhotoacousticVolume->SetVolumeValues(1, 0, 0, 4, 0, 0);
139  m_PhotoacousticVolume->SetVolumeValues(1, 0, 1, 5, 0, 0);
140  m_PhotoacousticVolume->SetVolumeValues(1, 1, 0, 6, 0, 0);
141  m_PhotoacousticVolume->SetVolumeValues(1, 1, 1, 7, 0, 0);
142 
143  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 0.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0));
144  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 1.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 1));
145  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 2.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 1, 0));
146  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 3.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 1, 1));
147  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 4.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 0, 0));
148  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 5.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 0, 1));
149  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 6.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 0));
150  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 7.0, m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1));
151  }
152 
153  void TestTissueVolumeContainsCorrectScatteringNumber()
154  {
155  int dims = 2;
156  m_TissueGeneratorParameters->SetXDim(dims);
157  m_TissueGeneratorParameters->SetYDim(dims);
158  m_TissueGeneratorParameters->SetZDim(dims);
159  auto rng = std::mt19937();
160  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
161 
162  m_PhotoacousticVolume->SetVolumeValues(0, 0, 0, 0, 0, 0);
163  m_PhotoacousticVolume->SetVolumeValues(0, 0, 1, 0, 1, 0);
164  m_PhotoacousticVolume->SetVolumeValues(0, 1, 0, 0, 2, 0);
165  m_PhotoacousticVolume->SetVolumeValues(0, 1, 1, 0, 3, 0);
166  m_PhotoacousticVolume->SetVolumeValues(1, 0, 0, 0, 4, 0);
167  m_PhotoacousticVolume->SetVolumeValues(1, 0, 1, 0, 5, 0);
168  m_PhotoacousticVolume->SetVolumeValues(1, 1, 0, 0, 6, 0);
169  m_PhotoacousticVolume->SetVolumeValues(1, 1, 1, 0, 7, 0);
170 
171  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 0.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0));
172  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 1.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 1));
173  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 2.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 1, 0));
174  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 3.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 1, 1));
175  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 4.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 0, 0));
176  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 5.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 0, 1));
177  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 6.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 0));
178  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 7.0, m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1));
179  }
180 
181  void TestTissueVolumeContainsCorrectAnisotropyNumber()
182  {
183  int dims = 2;
184  m_TissueGeneratorParameters->SetXDim(dims);
185  m_TissueGeneratorParameters->SetYDim(dims);
186  m_TissueGeneratorParameters->SetZDim(dims);
187  auto rng = std::mt19937();
188  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(m_TissueGeneratorParameters, &rng);
189 
190  m_PhotoacousticVolume->SetVolumeValues(0, 0, 0, 0, 0, 0);
191  m_PhotoacousticVolume->SetVolumeValues(0, 0, 1, 0, 0, 1);
192  m_PhotoacousticVolume->SetVolumeValues(0, 1, 0, 0, 0, 2);
193  m_PhotoacousticVolume->SetVolumeValues(0, 1, 1, 0, 0, 3);
194  m_PhotoacousticVolume->SetVolumeValues(1, 0, 0, 0, 0, 4);
195  m_PhotoacousticVolume->SetVolumeValues(1, 0, 1, 0, 0, 5);
196  m_PhotoacousticVolume->SetVolumeValues(1, 1, 0, 0, 0, 6);
197  m_PhotoacousticVolume->SetVolumeValues(1, 1, 1, 0, 0, 7);
198 
199  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 0.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0));
200  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 1.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 1));
201  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 2.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 1, 0));
202  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 3.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 1, 1));
203  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 4.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 0, 0));
204  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 5.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 0, 1));
205  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 6.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 0));
206  CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be correct value", 7.0, m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1));
207  }
208 
209  mitk::pa::Volume::Pointer createTestVolume(double value)
210  {
211  auto* data = new double[27];
212  for (int i = 0; i < 27; ++i)
213  data[i] = value;
214  return mitk::pa::Volume::New(data, 3, 3, 3, 1);
215  }
216 
217  void assertEqual(mitk::pa::Volume::Pointer first, mitk::pa::Volume::Pointer second)
218  {
219  CPPUNIT_ASSERT(first->GetXDim() == second->GetXDim());
220  CPPUNIT_ASSERT(first->GetYDim() == second->GetYDim());
221  CPPUNIT_ASSERT(first->GetZDim() == second->GetZDim());
222  for (unsigned int x = 0; x < first->GetXDim(); ++x)
223  for (unsigned int y = 0; y < first->GetYDim(); ++y)
224  for (unsigned int z = 0; z < first->GetZDim(); ++z)
225  CPPUNIT_ASSERT(std::abs(first->GetData(x, y, z) - second->GetData(x, y, z)) < mitk::eps);
226  }
227 
228  void testSecondConstructor()
229  {
230  mitk::pa::Volume::Pointer absorption = createTestVolume(1);
231  mitk::pa::Volume::Pointer scattering = createTestVolume(2);
232  mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
233  mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
235 
236  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(absorption,
237  scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
238 
239  assertEqual(m_PhotoacousticVolume->GetAbsorptionVolume(), absorption);
240  assertEqual(m_PhotoacousticVolume->GetScatteringVolume(), scattering);
241  assertEqual(m_PhotoacousticVolume->GetAnisotropyVolume(), anisotropy);
242  assertEqual(m_PhotoacousticVolume->GetSegmentationVolume(), segmentation);
243  }
244 
245  void testCompleteAirVoxelInclusion()
246  {
247  mitk::pa::Volume::Pointer absorption = createTestVolume(1);
248  mitk::pa::Volume::Pointer scattering = createTestVolume(2);
249  mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
250  mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
252  m_TissueGeneratorParameters->SetXDim(3);
253  m_TissueGeneratorParameters->SetYDim(3);
254  m_TissueGeneratorParameters->SetZDim(3);
255  m_TissueGeneratorParameters->SetAirThicknessInMillimeters(10);
256  m_TissueGeneratorParameters->SetSkinThicknessInMillimeters(0);
257  m_TissueGeneratorParameters->SetAirAbsorption(2);
258  m_TissueGeneratorParameters->SetAirScattering(4);
259  m_TissueGeneratorParameters->SetAirAnisotropy(6);
260 
261  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(absorption,
262  scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
263 
264  m_PhotoacousticVolume->FinalizeVolume();
265 
266  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 2) < mitk::eps);
267  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 1) < mitk::eps);
268  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) < mitk::eps);
269  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 4) < mitk::eps);
270  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 2) < mitk::eps);
271  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 2) < mitk::eps);
272  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 6) < mitk::eps);
273  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 3) < mitk::eps);
274  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 3) < mitk::eps);
275  }
276 
277  void testRandomizeCoefficients()
278  {
279  mitk::pa::Volume::Pointer absorption = createTestVolume(1);
280  mitk::pa::Volume::Pointer scattering = createTestVolume(1);
281  mitk::pa::Volume::Pointer anisotropy = createTestVolume(1);
282  mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
284  m_TissueGeneratorParameters->SetXDim(3);
285  m_TissueGeneratorParameters->SetYDim(3);
286  m_TissueGeneratorParameters->SetZDim(3);
287  m_TissueGeneratorParameters->SetRandomizePhysicalProperties(true);
288  m_TissueGeneratorParameters->SetRandomizePhysicalPropertiesPercentage(1);
289  m_TissueGeneratorParameters->SetRngSeed(17);
290  m_TissueGeneratorParameters->SetUseRngSeed(true);
291 
292  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(absorption,
293  scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
294 
295  m_PhotoacousticVolume->FinalizeVolume();
296 
297  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 1) < 0.1);
298  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 1) < 0.1);
299  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) < 0.1);
300  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 1) < 0.1);
301  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 1) < 0.1);
302  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 1) < 0.1);
303  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 1) < 0.1);
304  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 1) < 0.1);
305  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 1) < 0.1);
306  }
307 
308  void testCompleteAirAndSkinVoxelInclusion()
309  {
310  mitk::pa::Volume::Pointer absorption = createTestVolume(1);
311  mitk::pa::Volume::Pointer scattering = createTestVolume(2);
312  mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
313  mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
315  m_TissueGeneratorParameters->SetXDim(3);
316  m_TissueGeneratorParameters->SetYDim(3);
317  m_TissueGeneratorParameters->SetZDim(3);
318  m_TissueGeneratorParameters->SetAirThicknessInMillimeters(10);
319  m_TissueGeneratorParameters->SetSkinThicknessInMillimeters(10);
320  m_TissueGeneratorParameters->SetAirAbsorption(2);
321  m_TissueGeneratorParameters->SetAirScattering(4);
322  m_TissueGeneratorParameters->SetAirAnisotropy(6);
323  m_TissueGeneratorParameters->SetSkinAbsorption(4);
324  m_TissueGeneratorParameters->SetSkinScattering(8);
325  m_TissueGeneratorParameters->SetSkinAnisotropy(12);
326 
327  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(absorption,
328  scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
329 
330  m_PhotoacousticVolume->FinalizeVolume();
331 
332  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 2) < mitk::eps);
333  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 4) < mitk::eps);
334  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) < mitk::eps);
335  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 4) < mitk::eps);
336  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 8) < mitk::eps);
337  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 2) < mitk::eps);
338  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 6) < mitk::eps);
339  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 12) < mitk::eps);
340  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 3) < mitk::eps);
341  }
342 
343  void testHalfAirVoxelInclusion()
344  {
345  mitk::pa::Volume::Pointer absorption = createTestVolume(1);
346  mitk::pa::Volume::Pointer scattering = createTestVolume(2);
347  mitk::pa::Volume::Pointer anisotropy = createTestVolume(3);
348  mitk::pa::Volume::Pointer segmentation = createTestVolume(4);
350  m_TissueGeneratorParameters->SetXDim(3);
351  m_TissueGeneratorParameters->SetYDim(3);
352  m_TissueGeneratorParameters->SetZDim(3);
353  m_TissueGeneratorParameters->SetAirThicknessInMillimeters(15);
354  m_TissueGeneratorParameters->SetSkinThicknessInMillimeters(0);
355  m_TissueGeneratorParameters->SetAirAbsorption(2);
356  m_TissueGeneratorParameters->SetAirScattering(4);
357  m_TissueGeneratorParameters->SetAirAnisotropy(6);
358 
359  m_PhotoacousticVolume = mitk::pa::InSilicoTissueVolume::New(absorption,
360  scattering, anisotropy, segmentation, m_TissueGeneratorParameters, properties);
361 
362  m_PhotoacousticVolume->FinalizeVolume();
363 
364  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(0, 0, 0) - 2) < mitk::eps);
365  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 1) - 1.5) < mitk::eps);
366  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAbsorptionVolume()->GetData(1, 1, 2) - 1) < mitk::eps);
367  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(0, 0, 0) - 4) < mitk::eps);
368  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 1) - 3) < mitk::eps);
369  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetScatteringVolume()->GetData(1, 1, 2) - 2) < mitk::eps);
370  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(0, 0, 0) - 6) < mitk::eps);
371  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 1) - 4.5) < mitk::eps);
372  CPPUNIT_ASSERT(std::abs(m_PhotoacousticVolume->GetAnisotropyVolume()->GetData(1, 1, 2) - 3) < mitk::eps);
373  }
374 
375  void tearDown() override
376  {
377  m_TissueGeneratorParameters = nullptr;
378  m_PhotoacousticVolume = nullptr;
379  }
380 };
381 
382 MITK_TEST_SUITE_REGISTRATION(mitkPhotoacousticVolume)
static Pointer New()
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
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
ImageReadAccessor class to get locked read access for a particular image part.
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 ...