static mitk::Image::Pointer GenerateMaskImage(unsigned int dimX, unsigned int dimY, unsigned int dimZ, float spacingX = 1, float spacingY = 1, float spacingZ = 1) { typedef itk::Image< TPixelType, 3 > ImageType; typename ImageType::RegionType imageRegion; imageRegion.SetSize(0, dimX); imageRegion.SetSize(1, dimY); imageRegion.SetSize(2, dimZ); typename ImageType::SpacingType spacing; spacing[0] = spacingX; spacing[1] = spacingY; spacing[2] = spacingZ; mitk::Point3D origin; origin.Fill(0.0); itk::Matrix<double, 3, 3> directionMatrix; directionMatrix.SetIdentity(); typename ImageType::Pointer image = ImageType::New(); image->SetSpacing( spacing ); image->SetOrigin( origin ); image->SetDirection( directionMatrix ); image->SetLargestPossibleRegion( imageRegion ); image->SetBufferedRegion( imageRegion ); image->SetRequestedRegion( imageRegion ); image->Allocate(); image->FillBuffer(1); mitk::Image::Pointer mitkImage = mitk::Image::New(); mitkImage->InitializeByItk( image.GetPointer() ); mitkImage->SetVolume( image->GetBufferPointer() ); return mitkImage; }
static mitk::Image::Pointer GenerateGradientWithDimXImage(unsigned int dimX, unsigned int dimY, unsigned int dimZ, float spacingX = 1, float spacingY = 1, float spacingZ = 1) { typedef itk::Image< TPixelType, 3 > ImageType; typename ImageType::RegionType imageRegion; imageRegion.SetSize(0, dimX); imageRegion.SetSize(1, dimY); imageRegion.SetSize(2, dimZ); typename ImageType::SpacingType spacing; spacing[0] = spacingX; spacing[1] = spacingY; spacing[2] = spacingZ; mitk::Point3D origin; origin.Fill(0.0); itk::Matrix<double, 3, 3> directionMatrix; directionMatrix.SetIdentity(); typename ImageType::Pointer image = ImageType::New(); image->SetSpacing( spacing ); image->SetOrigin( origin ); image->SetDirection( directionMatrix ); image->SetLargestPossibleRegion( imageRegion ); image->SetBufferedRegion( imageRegion ); image->SetRequestedRegion( imageRegion ); image->Allocate(); image->FillBuffer(0.0); typedef itk::ImageRegionIterator<ImageType> IteratorOutputType; IteratorOutputType it(image, imageRegion); it.GoToBegin(); TPixelType val = 0; while(!it.IsAtEnd()) { it.Set(val % dimX); val++; ++it; } mitk::Image::Pointer mitkImage = mitk::Image::New(); mitkImage->InitializeByItk( image.GetPointer() ); mitkImage->SetVolume( image->GetBufferPointer() ); return mitkImage; }
void WorkbenchUtils::addPaddingItk(itk::Image <PixelType, ImageDimension> *itkImage, Axis axis, bool append, int numberOfSlices, float pixelValue, Image::Pointer outImage) { // pixel type is templated. The input field for the value is set to float, so the user might enter some invalid values for the image type at hand. // since all primitive built-in types have well defined casting behaviour between each other, we'll just do a typecast. we will clip the entered // value at PixelTypes min/max to prevent an overflow. The possible loss of precision is ignored. float lower = itk::NumericTraits<PixelType>::min(); float upper = itk::NumericTraits<PixelType>::max(); float clippedPixelValue = std::max(lower, std::min(pixelValue, upper)); PixelType paddingPixelValue = (PixelType) clippedPixelValue; typedef itk::Image <PixelType, ImageDimension> ImageType; // gather all data typename ImageType::SizeType lowerBound; typename ImageType::SizeType upperBound; lowerBound.Fill(0); upperBound.Fill(0); unsigned int itkAxis = convertToItkAxis(axis); if (append) { upperBound[itkAxis] = numberOfSlices; } else { lowerBound[itkAxis] = numberOfSlices; } // setup the filter typedef itk::ConstantPadImageFilter <ImageType, ImageType> PadFilterType; typename PadFilterType::Pointer padFilter = PadFilterType::New(); padFilter->SetInput(itkImage); padFilter->SetConstant(paddingPixelValue); padFilter->SetPadLowerBound(lowerBound); padFilter->SetPadUpperBound(upperBound); padFilter->UpdateLargestPossibleRegion(); // Update the origin, since padding creates negative index that is lost when returned to MITK typename ImageType::Pointer paddedImage = padFilter->GetOutput(); typename ImageType::RegionType paddedImageRegion = paddedImage->GetLargestPossibleRegion(); typename ImageType::PointType origin; paddedImage->TransformIndexToPhysicalPoint(paddedImageRegion.GetIndex(), origin); paddedImage->SetOrigin(origin); // get the results and cast them back to mitk. return via out parameter. outImage->InitializeByItk(paddedImage.GetPointer()); CastToMitkImage(paddedImage, outImage); }