19 #include <itkExtractImageFilter.h> 24 : m_SliceIndex(0), m_SliceDimension(0), m_TimeStep(0), m_DirectionCollapseToStrategy(DIRECTIONCOLLAPSETOGUESS)
26 MITK_WARN <<
"Class ExtractImageFilter is deprecated! Use ExtractSliceFilter instead.";
37 if ((input->GetDimension() > 4) || (input->GetDimension() < 2))
39 MITK_ERROR <<
"mitk::ExtractImageFilter:GenerateData works only with 3D and 3D+t images, sorry." << std::endl;
40 itkExceptionMacro(
"mitk::ExtractImageFilter works only with 3D and 3D+t images, sorry.");
43 else if (input->GetDimension() == 4)
46 timeSelector->SetInput(input);
48 timeSelector->UpdateLargestPossibleRegion();
49 input = timeSelector->GetOutput();
51 else if (input->GetDimension() == 2)
54 resultImage =
const_cast<Image *
>(input.GetPointer());
55 ImageToImageFilter::SetNthOutput(0, resultImage);
62 <<
" makes no sense with an " << input->GetDimension() <<
"D image." << std::endl;
63 itkExceptionMacro(
"This is not a sensible value for m_SliceDimension.");
71 if (!inputImageGeometry)
73 MITK_ERROR <<
"In ExtractImageFilter::ItkImageProcessing: Input image has no geometry!" << std::endl;
94 planeGeometry->InitializeStandardPlane(inputImageGeometry, orientation, (
ScalarType)
m_SliceIndex,
true,
false);
96 planeGeometry->ChangeImageGeometryConsideringOriginOffset(
true);
97 resultImage->SetGeometry(planeGeometry);
100 template <
typename TPixel,
unsigned int VImageDimension>
104 typedef itk::Image<TPixel, VImageDimension> ImageType3D;
105 typedef itk::Image<TPixel, VImageDimension - 1> ImageType2D;
107 typedef itk::ExtractImageFilter<ImageType3D, ImageType2D> ExtractImageFilterType;
108 typename ImageType3D::RegionType inSliceRegion = itkImage->GetLargestPossibleRegion();
112 typename ExtractImageFilterType::Pointer sliceExtractor = ExtractImageFilterType::New();
114 typename ExtractImageFilterType::DIRECTIONCOLLAPSESTRATEGY collapseStrategy;
118 collapseStrategy = ExtractImageFilterType::DIRECTIONCOLLAPSETOUNKOWN;
121 collapseStrategy = ExtractImageFilterType::DIRECTIONCOLLAPSETOIDENTITY;
124 collapseStrategy = ExtractImageFilterType::DIRECTIONCOLLAPSETOSUBMATRIX;
128 collapseStrategy = ExtractImageFilterType::DIRECTIONCOLLAPSETOGUESS;
132 sliceExtractor->SetDirectionCollapseToStrategy(collapseStrategy);
133 sliceExtractor->SetInput(itkImage);
137 sliceExtractor->SetExtractionRegion(inSliceRegion);
140 sliceExtractor->UpdateLargestPossibleRegion();
142 typename ImageType2D::Pointer slice = sliceExtractor->GetOutput();
166 Superclass::GenerateInputRequestedRegion();
171 if (input->GetDimension() == 2)
173 input->SetRequestedRegionToLargestPossibleRegion();
178 requestedRegion = output->GetRequestedRegion();
179 requestedRegion.SetIndex(0, 0);
180 requestedRegion.SetIndex(1, 0);
181 requestedRegion.SetIndex(2, 0);
182 requestedRegion.SetSize(0, input->GetDimension(0));
183 requestedRegion.SetSize(1, input->GetDimension(1));
184 requestedRegion.SetSize(2, input->GetDimension(2));
189 input->SetRequestedRegion(&requestedRegion);
210 if (
m_SliceDimension >= input->GetDimension() && input->GetDimension() != 2)
213 <<
" makes no sense with an " << input->GetDimension() <<
"D image." << std::endl;
214 itkExceptionMacro(
"This is not a sensible value for m_SliceDimension.");
219 if (input->GetDimension() == 2)
224 unsigned int tmpDimensions[2];
226 switch (sliceDimension)
231 tmpDimensions[0] = input->GetDimension(0);
232 tmpDimensions[1] = input->GetDimension(1);
236 tmpDimensions[0] = input->GetDimension(0);
237 tmpDimensions[1] = input->GetDimension(2);
241 tmpDimensions[0] = input->GetDimension(1);
242 tmpDimensions[1] = input->GetDimension(2);
246 output->Initialize(input->GetPixelType(), 2, tmpDimensions, 1 );
258 output->SetPropertyList(input->GetPropertyList()->Clone());
#define AccessFixedDimensionByItk(mitkImage, itkImageTypeFunction, dimension)
Access a mitk-image with known dimension by an itk-image.
Image::Pointer GrabItkImageMemory(itk::SmartPointer< ItkOutputImageType > &itkimage, mitk::Image *mitkImage=nullptr, const BaseGeometry *geometry=nullptr, bool update=true)
Grabs the memory of an itk::Image (with a specific type) and puts it into an mitk::Image.The memory is managed by the mitk::Image after calling this function. The itk::Image remains valid until the mitk::Image decides to free the memory.
itk::ImageRegion< RegionDimension > RegionType
Image class for storing images.
InputImageType * GetInput(void)
OutputType * GetOutput()
Get the output data of this image source object.
mitk::BaseGeometry * GetGeometry(int t=0) const
Return the geometry, which is a TimeGeometry, of the data as non-const pointer.
BaseGeometry Describes the geometry of a data object.