Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkPAFilterServiceTest.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 
17 #include <mitkImage.h>
18 #include <mitkImageReadAccessor.h>
20 
21 // us
22 #include <usModule.h>
23 #include <usModuleResource.h>
24 #include <usGetModuleContext.h>
25 #include <usModuleContext.h>
26 #include <usModuleResourceStream.h>
27 
28 #include <random>
29 #include <chrono>
30 
31 class mitkPAFilterServiceTestSuite : public mitk::TestFixture
32 {
33  CPPUNIT_TEST_SUITE(mitkPAFilterServiceTestSuite);
34  MITK_TEST(testRunning);
35  CPPUNIT_TEST_SUITE_END();
36 
37 private:
38 
39  mitk::PhotoacousticFilterService::Pointer m_PhotoacousticFilterService;
40  mitk::BeamformingSettings::Pointer m_BeamformingSettings;
41  unsigned int* inputDimensions;
42  const int xDim = 16;
43  const int yDim = 128;
44  const int length = yDim * xDim;
45 
46 public:
47 
48  void setUp() override
49  {
50  m_PhotoacousticFilterService = mitk::PhotoacousticFilterService::New();
51  m_BeamformingSettings = CreateBeamformingSettings();
52  }
53 
54  mitk::BeamformingSettings::Pointer CreateBeamformingSettings()
55  {
56  inputDimensions = new unsigned int[length];
57  inputDimensions[0] = yDim;
58  inputDimensions[1] = xDim;
59  mitk::BeamformingSettings::Pointer outputSettings = mitk::BeamformingSettings::New(
60  (float)(0.3 / 1000),
61  (float)(1500),
62  (float)(0.0125 / 1000000),
63  27,
64  true,
65  3000,
66  128,
67  inputDimensions,
68  yDim * (0.0125 / 1000000) * (1500),
69  false,
70  16,
71  mitk::BeamformingSettings::Apodization::Box,
72  128,
73  mitk::BeamformingSettings::BeamformingAlgorithm::DAS,
75  0);
76 
77  return outputSettings;
78  }
79 
80  void testRunning()
81  {
82  float* testArray = new float[length];
83  for (int i = 0; i < length; ++i)
84  {
85  testArray[i] = 0;
86  }
87 
88  mitk::PixelType pixelType = mitk::MakeScalarPixelType<float>();
90  testImage->Initialize(pixelType, 2, inputDimensions);
91  testImage->SetImportSlice(testArray, 0, 0, 0, mitk::Image::ImportMemoryManagementType::CopyMemory);
92  delete[] testArray;
93 
94  mitk::ImageReadAccessor readAccessInput(testImage);
95  const float* inputArray = (const float*)readAccessInput.GetData();
96 
97  for (int i = 0; i < length; ++i)
98  {
99  CPPUNIT_ASSERT_MESSAGE(std::string("Input array already not correct: " + std::to_string(inputArray[i])), std::abs(inputArray[i]) < 1e-5f);
100  }
101 
102  auto output = m_PhotoacousticFilterService->ApplyBeamforming(testImage, m_BeamformingSettings);
103 
104  mitk::ImageReadAccessor readAccess(output);
105  const float* outputArray = (const float*)readAccess.GetData();
106 
107  for (int i = 0; i < length; ++i)
108  {
109  CPPUNIT_ASSERT_MESSAGE(std::string("Output array not correct: " + std::to_string(std::abs(outputArray[i]))), std::abs(outputArray[i]) < 1e-5f);
110  }
111  }
112 
113  void tearDown() override
114  {
115  m_PhotoacousticFilterService = nullptr;
116  delete[] inputDimensions;
117  }
118 };
119 
120 MITK_TEST_SUITE_REGISTRATION(mitkPAFilterService)
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
Test fixture for parameterized tests.
static Pointer New(float pitchInMeters, float speedOfSound, float timeSpacing, float angle, bool isPhotoacousticImage, unsigned int samplesPerLine, unsigned int reconstructionLines, unsigned int *inputDim, float reconstructionDepth, bool useGPU, unsigned int GPUBatchSize, Apodization apod, unsigned int apodizationArraySize, BeamformingAlgorithm algorithm, ProbeGeometry geometry, float probeRadius)
static Pointer New()
ImageReadAccessor class to get locked read access for a particular image part.
Class for defining the data type of pixels.
Definition: mitkPixelType.h:51