13 #ifndef mitkImageGenerator_h
14 #define mitkImageGenerator_h
18 #include <itkImageRegionIterator.h>
19 #include <itkMersenneTwisterRandomVariateGenerator.h>
50 template <
typename TPixelType>
58 typedef itk::Image<TPixelType, 3> ImageType;
59 typename ImageType::RegionType imageRegion;
60 imageRegion.SetSize(0, dimX);
61 imageRegion.SetSize(1, dimY);
62 imageRegion.SetSize(2, dimZ);
63 typename ImageType::SpacingType spacing;
64 spacing[0] = spacingX;
65 spacing[1] = spacingY;
66 spacing[2] = spacingZ;
70 itk::Matrix<double, 3, 3> directionMatrix;
71 directionMatrix.SetIdentity();
73 typename ImageType::Pointer image = ImageType::New();
74 image->SetSpacing(spacing);
75 image->SetOrigin(origin);
76 image->SetDirection(directionMatrix);
77 image->SetLargestPossibleRegion(imageRegion);
78 image->SetBufferedRegion(imageRegion);
79 image->SetRequestedRegion(imageRegion);
81 image->FillBuffer(0.0);
83 typedef itk::ImageRegionIterator<ImageType> IteratorOutputType;
84 IteratorOutputType it(image, imageRegion);
96 mitkImage->InitializeByItk(image.GetPointer());
97 mitkImage->SetVolume(image->GetBufferPointer());
111 template <
typename TPixelType>
118 output->SetGeometry(reference->GetGeometry());
119 output->Initialize(output_type, reference->GetDimension(), reference->GetDimensions());
122 TPixelType *imageBuffer =
nullptr;
126 imageBuffer =
static_cast<TPixelType *
>(writeAccess.
GetData());
130 MITK_ERROR <<
"Write access not granted on mitk::Image.";
134 for (
unsigned int i = 0; i < output->GetVolumeData(0)->GetSize(); i++)
136 imageBuffer[i] = fill_value;
160 template <
typename TPixelType>
163 unsigned int dimZ = 1,
164 unsigned int dimT = 1,
168 const double randomMax = 1000.0f,
169 const double randMin = 0.0f)
177 auto dimensions =
new unsigned int[4];
178 unsigned int numberOfDimensions = 0;
179 unsigned int bufferSize = 0;
186 numberOfDimensions = 2;
187 dimensions[0] = dimX;
188 dimensions[1] = dimY;
189 bufferSize = dimX * dimY;
193 numberOfDimensions = 3;
194 dimensions[0] = dimX;
195 dimensions[1] = dimY;
196 dimensions[2] = dimZ;
197 bufferSize = dimX * dimY * dimZ;
202 numberOfDimensions = 4;
203 dimensions[0] = dimX;
204 dimensions[1] = dimY;
205 dimensions[2] = dimZ;
206 dimensions[3] = dimT;
207 bufferSize = dimX * dimY * dimZ * dimT;
209 output->Initialize(type, numberOfDimensions, dimensions);
211 spacing[0] = spacingX;
212 spacing[1] = spacingY;
213 spacing[2] = spacingZ;
214 output->SetSpacing(spacing);
217 TPixelType *imageBuffer =
nullptr;
221 imageBuffer =
static_cast<TPixelType *
>(writeAccess.
GetData());
225 MITK_ERROR <<
"Write access not granted on mitk::Image.";
229 itk::Statistics::MersenneTwisterRandomVariateGenerator::Pointer randomGenerator =
230 itk::Statistics::MersenneTwisterRandomVariateGenerator::New();
231 randomGenerator->Initialize();
234 for (
unsigned int i = 0; i < bufferSize; i++)
241 imageBuffer[i] = (TPixelType)randomGenerator->GetIntegerVariate((
int)randomMax);
248 imageBuffer[i] = (TPixelType)randomGenerator->GetUniformVariate(randMin, randomMax);
253 imageBuffer[i] = (
unsigned char)((
int)randomGenerator->GetIntegerVariate((
int)randomMax)) % 256;
257 imageBuffer[i] = (
unsigned short)((
int)randomGenerator->GetIntegerVariate((
int)randomMax)) % 65536;
Generator for synthetic MITK images.
static mitk::Image::Pointer GenerateImageFromReference(mitk::Image::Pointer reference, TPixelType fill_value)
Generates an image with the same geometry as the given reference image.
static mitk::Image::Pointer GenerateRandomImage(unsigned int dimX, unsigned int dimY, unsigned int dimZ=1, unsigned int dimT=1, mitk::ScalarType spacingX=1, mitk::ScalarType spacingY=1, mitk::ScalarType spacingZ=1, const double randomMax=1000.0f, const double randMin=0.0f)
Generates a random image with the defined size and spacing.
static mitk::Image::Pointer GenerateGradientImage(unsigned int dimX, unsigned int dimY, unsigned int dimZ, float spacingX=1, float spacingY=1, float spacingZ=1)
Generates a 3D gradient image with the defined size and spacing.
Provides locked write access to a particular region of image data.
void * GetData()
Get a non-const pointer to the raw image data for writing.
Describes the data type of image pixels.
ItkIOComponentType GetComponentType() const
Get the scalar component type.
#define MITK_ERROR
Log an error message.
Find image slices visible on a given plane.
double ScalarType
Scalar type used throughout MITK for geometric computations.