Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkTestDynamicImageGenerator.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 
15 #include "mitkImageCast.h"
16 
17 namespace mitk
18 {
19  typedef itk::Image<double, 3> FrameITKImageType;
20  typedef itk::Image<double, 4> DynamicITKImageType;
21  typedef itk::Image<unsigned char, 3> MaskITKImageType;
22 
23  TestImageType::Pointer GenerateTestImage(int factor)
24  {
25  TestImageType::Pointer image = TestImageType::New();
26 
27  TestImageType::IndexType start;
28  start[0] = 0; // first index on X
29  start[1] = 0; // first index on Y
30 
31  TestImageType::SizeType size;
32  size[0] = 3; // size along X
33  size[1] = 3; // size along Y
34 
35  TestImageType::RegionType region;
36  region.SetSize(size);
37  region.SetIndex(start);
38 
39  image->SetRegions(region);
40  image->Allocate();
41 
42  itk::ImageRegionIterator<TestImageType> it = itk::ImageRegionIterator<TestImageType>(image,
43  image->GetLargestPossibleRegion());
44 
45  int count = 1;
46 
47  while (!it.IsAtEnd())
48  {
49  it.Set(count * factor);
50  ++it;
51  ++count;
52  }
53 
54  return image;
55  }
56 
57  TestMaskType::Pointer GenerateTestMask()
58  {
59  TestMaskType::Pointer image = TestMaskType::New();
60 
61  TestMaskType::IndexType start;
62  start[0] = 0; // first index on X
63  start[1] = 0; // first index on Y
64 
65  TestMaskType::SizeType size;
66  size[0] = 3; // size along X
67  size[1] = 3; // size along Y
68 
69  TestMaskType::RegionType region;
70  region.SetSize(size);
71  region.SetIndex(start);
72 
73  image->SetRegions(region);
74  image->Allocate();
75 
76  itk::ImageRegionIterator<TestMaskType> it = itk::ImageRegionIterator<TestMaskType>(image,
77  image->GetLargestPossibleRegion());
78 
79  int count = 1;
80 
81  while (!it.IsAtEnd())
82  {
83  if (count > 1 && count < 5)
84  {
85  it.Set(1);
86  }
87  else
88  {
89  it.Set(0);
90  }
91 
92  ++it;
93  ++count;
94  }
95 
96  return image;
97  }
98 
100  {
101  FrameITKImageType::Pointer image = FrameITKImageType::New();
102 
103  FrameITKImageType::IndexType start;
104  start[0] = 0; // first index on X
105  start[1] = 0; // first index on Y
106  start[2] = 0; // first index on Z
107 
108  FrameITKImageType::SizeType size;
109  size[0] = 3; // size along X
110  size[1] = 3; // size along Y
111  size[2] = 3; // size along Z
112 
113  FrameITKImageType::RegionType region;
114  region.SetSize(size);
115  region.SetIndex(start);
116 
117  image->SetRegions(region);
118  image->Allocate();
119 
120  itk::ImageRegionIterator<FrameITKImageType> it = itk::ImageRegionIterator<FrameITKImageType>(image,
121  image->GetLargestPossibleRegion());
122 
123  int count = 0;
124 
125  while (!it.IsAtEnd())
126  {
127  double slope = count % (size[0] * size[1]);
128  double offset = itk::Math::Floor<double, double>(count / (size[0] * size[1])) * 10;
129 
130  it.Set(slope * timePoint + offset);
131  ++it;
132  ++count;
133  }
134 
136  mitkImage->InitializeByItk(image.GetPointer());
137  mitkImage->SetVolume(image->GetBufferPointer());
138 
139  return mitkImage;
140  }
141 
143  {
144  MaskITKImageType::Pointer image = MaskITKImageType::New();
145 
146  MaskITKImageType::IndexType start;
147  start[0] = 0; // first index on X
148  start[1] = 0; // first index on Y
149  start[2] = 0; // first index on Z
150 
151  MaskITKImageType::SizeType size;
152  size[0] = 3; // size along X
153  size[1] = 3; // size along Y
154  size[2] = 3; // size along Z
155 
156  MaskITKImageType::RegionType region;
157  region.SetSize(size);
158  region.SetIndex(start);
159 
160  image->SetRegions(region);
161  image->Allocate();
162 
163  itk::ImageRegionIterator<MaskITKImageType> it = itk::ImageRegionIterator<MaskITKImageType>(image,
164  image->GetLargestPossibleRegion());
165 
166  int count = 0;
167 
168  while (!it.IsAtEnd())
169  {
170  if (count < 14)
171  {
172  it.Set(1);
173  }
174  else
175  {
176  it.Set(0);
177  }
178 
179  ++it;
180  ++count;
181  }
182 
184  mitkImage->InitializeByItk(image.GetPointer());
185  mitkImage->SetVolume(image->GetBufferPointer());
186 
187  return mitkImage;
188  }
189 
190 
192  {
193 
195  mitk::Image::Pointer dynamicImage = mitk::Image::New();
196 
197  DynamicITKImageType::Pointer dynamicITKImage = DynamicITKImageType::New();
198  DynamicITKImageType::RegionType dynamicITKRegion;
199  DynamicITKImageType::PointType dynamicITKOrigin;
200  DynamicITKImageType::IndexType dynamicITKIndex;
201  DynamicITKImageType::SpacingType dynamicITKSpacing;
202 
203  dynamicITKSpacing[0] = tempImage->GetGeometry()->GetSpacing()[0];
204  dynamicITKSpacing[1] = tempImage->GetGeometry()->GetSpacing()[1];
205  dynamicITKSpacing[2] = tempImage->GetGeometry()->GetSpacing()[2];
206  dynamicITKSpacing[3] = 5.0;
207 
208  dynamicITKIndex[0] = 0; // The first pixel of the REGION
209  dynamicITKIndex[1] = 0;
210  dynamicITKIndex[2] = 0;
211  dynamicITKIndex[3] = 0;
212 
213  dynamicITKRegion.SetSize(0, tempImage->GetDimension(0));
214  dynamicITKRegion.SetSize(1, tempImage->GetDimension(1));
215  dynamicITKRegion.SetSize(2, tempImage->GetDimension(2));
216  dynamicITKRegion.SetSize(3, 10);
217 
218  dynamicITKRegion.SetIndex(dynamicITKIndex);
219 
220  dynamicITKOrigin[0] = tempImage->GetGeometry()->GetOrigin()[0];
221  dynamicITKOrigin[1] = tempImage->GetGeometry()->GetOrigin()[1];
222  dynamicITKOrigin[2] = tempImage->GetGeometry()->GetOrigin()[2];
223 
224  dynamicITKImage->SetOrigin(dynamicITKOrigin);
225  dynamicITKImage->SetSpacing(dynamicITKSpacing);
226  dynamicITKImage->SetRegions(dynamicITKRegion);
227  dynamicITKImage->Allocate();
228  dynamicITKImage->FillBuffer(0); //not sure if this is necessary
229 
230  // Convert
231  mitk::CastToMitkImage(dynamicITKImage, dynamicImage);
232 
234  timeGeometry->ClearAllGeometries();
235 
236 
237  for (int i = 0; i < 10; ++i)
238  {
239  mitk::Image::Pointer frameImage = GenerateTestFrame(1 + (dynamicITKSpacing[3] * i));
240  mitk::ImageReadAccessor accessor(frameImage);
241  dynamicImage->SetVolume(accessor.GetData(), i);
242 
243  timeGeometry->AppendNewTimeStepClone(frameImage->GetGeometry(), 1 + (dynamicITKSpacing[3] * i),
244  1 + (dynamicITKSpacing[3]*(i+1)));
245  }
246 
247  dynamicImage->SetTimeGeometry(timeGeometry);
248 
249  return dynamicImage;
250  }
251 
252 }
253 
Image::Pointer MITKTESTINGHELPER_EXPORT GenerateTestMaskMITK()
itk::Image< unsigned char, 3 > MaskITKImageType
DataCollection - Class to facilitate loading/accessing structured data.
TestImageType::Pointer MITKTESTINGHELPER_EXPORT GenerateTestImage(int factor=1)
static Vector3D offset
Image::Pointer MITKTESTINGHELPER_EXPORT GenerateDynamicTestImageMITK()
mitk::Image::Pointer image
Image::Pointer MITKTESTINGHELPER_EXPORT GenerateTestFrame(double timePoint)
static Pointer New()
void CastToMitkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, itk::SmartPointer< mitk::Image > &mitkoutputimage)
Cast an itk::Image (with a specific type) to an mitk::Image.
Definition: mitkImageCast.h:74
itk::Image< double, 3 > FrameITKImageType
itk::Image< double, 4 > DynamicITKImageType
ImageReadAccessor class to get locked read access for a particular image part.
TestMaskType::Pointer MITKTESTINGHELPER_EXPORT GenerateTestMask()
const void * GetData() const
Gives const access to the data.