Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
vtkMitkThickSlicesFilterTest.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 "mitkTestingMacros.h"
14 
16 
17 #include "mitkImage.h"
18 #include "mitkImageWriteAccessor.h"
19 
20 #include <vtkDataArray.h>
21 #include <vtkImageData.h>
22 #include <vtkPointData.h>
23 
24 class vtkMitkThickSlicesFilterTestHelper
25 {
26 public:
27  static mitk::Image::Pointer CreateTestImage(int min, int max)
28  {
29  mitk::PixelType pixelType(mitk::MakeScalarPixelType<unsigned char>());
31  auto dim = new unsigned int[3];
32  dim[0] = 10;
33  dim[1] = 10;
34  dim[2] = max + 1 - min;
35  testImage->Initialize(pixelType, 3, dim);
36  size_t buffer_size = dim[0] * dim[1] * sizeof(unsigned char);
37 
38  for (int i = min; i <= max; ++i)
39  {
40  mitk::ImageWriteAccessor writeAccess(testImage, testImage->GetSliceData(i - min));
41  memset(writeAccess.GetData(), i, buffer_size);
42  }
43 
44  return testImage;
45  }
46 
47  static void EvaluateResult(unsigned char expectedValue, vtkImageData *image, const char *projection)
48  {
50  image->GetDimensions()[0] == 10 && image->GetDimensions()[1] == 10 && image->GetDimensions()[2] == 1,
51  "Resulting image has correct size");
52 
53  auto *value = static_cast<unsigned char *>(image->GetScalarPointer(0, 0, 0));
54  MITK_INFO << "Evaluating projection mode: " << projection;
55  MITK_INFO << "expected value: " << static_cast<double>(expectedValue);
56  MITK_INFO << "actual value: " << static_cast<double>(value[0]);
57  MITK_TEST_CONDITION_REQUIRED(value[0] == expectedValue, "Resulting image has correct pixel-value");
58  }
59 };
60 
65 int vtkMitkThickSlicesFilterTest(int, char *[])
66 {
67  // always start with this!
68  MITK_TEST_BEGIN("vtkMitkThickSlicesFilterTest")
69 
71 
73  // Image looks like:
74  // 000000000
75  // 111111111
76  // 222222222
77  mitk::Image::Pointer testImage1 = vtkMitkThickSlicesFilterTestHelper::CreateTestImage(0, 2);
78  thickSliceFilter->SetInputData(testImage1->GetVtkImageData());
79 
80  // MaxIP
81  thickSliceFilter->SetThickSliceMode(0);
82  thickSliceFilter->Modified();
83  thickSliceFilter->Update();
84  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(2, thickSliceFilter->GetOutput(), "MaxIP");
85 
86  // Sum
87  thickSliceFilter->SetThickSliceMode(1);
88  thickSliceFilter->Modified();
89  thickSliceFilter->Update();
90  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(1, thickSliceFilter->GetOutput(), "Sum");
91 
92  // Weighted
93  thickSliceFilter->SetThickSliceMode(2);
94  thickSliceFilter->Modified();
95  thickSliceFilter->Update();
96  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(1, thickSliceFilter->GetOutput(), "Weighted");
97 
98  // MinIP
99  thickSliceFilter->SetThickSliceMode(3);
100  thickSliceFilter->Modified();
101  thickSliceFilter->Update();
102  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(0, thickSliceFilter->GetOutput(), "MinIP");
103 
104  // Mean
105  thickSliceFilter->SetThickSliceMode(4);
106  thickSliceFilter->Modified();
107  thickSliceFilter->Update();
108  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(1, thickSliceFilter->GetOutput(), "Mean");
109 
111  // Image looks like:
112  // 333333333
113  // 444444444
114  // 555555555
115  // 666666666
116  // 777777777
117  // 888888888
118 
119  mitk::Image::Pointer testImage2 = vtkMitkThickSlicesFilterTestHelper::CreateTestImage(3, 8);
120  thickSliceFilter->SetInputData(testImage2->GetVtkImageData());
121 
122  // MaxIP
123  thickSliceFilter->SetThickSliceMode(0);
124  thickSliceFilter->Modified();
125  thickSliceFilter->Update();
126  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(8, thickSliceFilter->GetOutput(), "MaxIP");
127 
128  // Sum
129  thickSliceFilter->SetThickSliceMode(1);
130  thickSliceFilter->Modified();
131  thickSliceFilter->Update();
132  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(5, thickSliceFilter->GetOutput(), "Sum");
133 
134  // Weighted
135  thickSliceFilter->SetThickSliceMode(2);
136  thickSliceFilter->Modified();
137  thickSliceFilter->Update();
138  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(4, thickSliceFilter->GetOutput(), "Weighted");
139 
140  // MinIP
141  thickSliceFilter->SetThickSliceMode(3);
142  thickSliceFilter->Modified();
143  thickSliceFilter->Update();
144  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(3, thickSliceFilter->GetOutput(), "MinIP");
145 
146  // Mean
147  thickSliceFilter->SetThickSliceMode(4);
148  thickSliceFilter->Modified();
149  thickSliceFilter->Update();
150  vtkMitkThickSlicesFilterTestHelper::EvaluateResult(6, thickSliceFilter->GetOutput(), "Mean");
151 
152  thickSliceFilter->Delete();
153 
154  MITK_TEST_END()
155 }
#define MITK_INFO
Definition: mitkLogMacros.h:18
#define MITK_TEST_CONDITION_REQUIRED(COND, MSG)
section GeneralTestsDeprecatedOldTestingStyle Deprecated macros All tests with MITK_TEST_BEGIN()
static vtkMitkThickSlicesFilter * New()
static T max(T x, T y)
Definition: svm.cpp:56
mitk::Image::Pointer image
int vtkMitkThickSlicesFilterTest(int, char *[])
static Pointer New()
static T min(T x, T y)
Definition: svm.cpp:53
ImageWriteAccessor class to get locked write-access for a particular image part.
and MITK_TEST_END()
Class for defining the data type of pixels.
Definition: mitkPixelType.h:51