20 #include "itkImageRegionConstIterator.h" 21 #include "itkImageRegionIteratorWithIndex.h" 26 : m_ClippingGeometry(nullptr),
27 m_ClipPartAboveGeometry(true),
29 m_AutoOutsideValue(false),
30 m_LabelBothSides(false),
31 m_AutoOrientLabels(false),
32 m_AboveGeometryLabel(1),
33 m_BelowGeometryLabel(2)
35 this->SetNumberOfIndexedInputs(2);
36 this->SetNumberOfRequiredInputs(2);
75 Superclass::GenerateInputRequestedRegion();
95 itkDebugMacro(<<
"GenerateOutputInformation()");
98 auto tmpDimensions =
new unsigned int[input->GetDimension()];
100 for (i = 0; i < input->GetDimension(); ++i)
101 tmpDimensions[i] = input->GetDimension(i);
103 output->Initialize(input->GetPixelType(), input->GetDimension(), tmpDimensions, input->GetNumberOfChannels());
105 delete[] tmpDimensions;
107 output->SetGeometry(static_cast<mitk::BaseGeometry *>(input->GetGeometry()->Clone().GetPointer()));
109 output->SetPropertyList(input->GetPropertyList()->Clone());
114 template <
typename TPixel,
unsigned int VImageDimension>
119 typedef itk::Image<TPixel, VImageDimension> ItkInputImageType;
120 typedef itk::Image<TPixel, VImageDimension> ItkOutputImageType;
122 typedef itk::ImageRegionConstIteratorWithIndex<ItkInputImageType> ItkInputImageIteratorType;
123 typedef itk::ImageRegionIteratorWithIndex<ItkOutputImageType> ItkOutputImageIteratorType;
127 outputimagetoitk->Update();
128 typename ItkOutputImageType::Pointer outputItkImage = outputimagetoitk->GetOutput();
131 typename ItkInputImageType::RegionType inputRegionOfInterest = inputItkImage->GetLargestPossibleRegion();
132 ItkInputImageIteratorType inputIt(inputItkImage, inputRegionOfInterest);
133 ItkOutputImageIteratorType outputIt(outputItkImage, inputRegionOfInterest);
135 typename ItkOutputImageType::PixelType outsideValue;
139 outsideValue = (
typename ItkOutputImageType::PixelType)geometryClipper->
m_OutsideValue;
145 int i, dim = IndexType::GetIndexDimension();
154 if (clippingPlaneGeometry->
IsAbove(pointInMM) != above)
158 MITK_INFO << leftMostPoint <<
" is BELOW geometry. Inverting meaning of above" << std::endl;
161 MITK_INFO << leftMostPoint <<
" is above geometry" << std::endl;
169 for (inputIt.GoToBegin(), outputIt.GoToBegin(); !inputIt.IsAtEnd(); ++inputIt, ++outputIt)
171 if ((
typename ItkOutputImageType::PixelType)inputIt.Get() == outsideValue)
173 outputIt.Set(outsideValue);
177 for (i = 0; i < dim; ++i)
179 inputGeometry->IndexToWorld(indexPt, pointInMM);
180 if (clippingPlaneGeometry->
IsAbove(pointInMM) == above)
183 outputIt.Set(aboveLabel);
185 outputIt.Set(outsideValue);
190 outputIt.Set(belowLabel);
192 outputIt.Set(inputIt.Get());
208 const PlaneGeometry *clippingGeometryOfCurrentTimeStep =
nullptr;
216 clippingGeometryOfCurrentTimeStep =
220 if (clippingGeometryOfCurrentTimeStep ==
nullptr)
232 int tstart = outputRegion.GetIndex(3);
233 int tmax = tstart + outputRegion.GetSize(3);
236 for (t = tstart; t < tmax; ++t)
252 clippingGeometryOfCurrentTimeStep =
void SetRequestedRegionToLargestPossibleRegion() override
void GenerateOutputInformation() override
ScalarType m_OutsideValue
mitk::ImageTimeSelector::Pointer m_InputTimeSelector
virtual bool GetLabelBothSides() const
itk::TimeStamp m_TimeOfHeaderInitialization
const mitk::BaseGeometry * GetClippingGeometry() const
const mitk::TimeGeometry * GetClippingTimeGeometry() const
virtual bool GetAutoOrientLabels() const
void GenerateData() override
bool m_ClipPartAboveGeometry
GeometryClipImageFilter()
mitk::ImageTimeSelector::Pointer m_OutputTimeSelector
void SetClippingGeometry(const mitk::BaseGeometry *aClippingGeometry)
mitk::GeometryData::Pointer m_ClippingGeometryData
virtual bool IsAbove(const Point3D &pt3d_mm, bool considerBoundingBox=false) const
Calculates, whether a point is below or above the plane. There are two different calculation methods...
itk::ImageRegion< RegionDimension > RegionType
virtual TimeStepType TimePointToTimeStep(TimePointType timePoint) const =0
Converts a time point to the corresponding time step.
Image class for storing images.
virtual TimePointType TimeStepToTimePoint(TimeStepType timeStep) const =0
Converts a time step to a time point.
void GenerateInputRequestedRegion() override
~GeometryClipImageFilter() override
void GenerateTimeInInputRegion(const mitk::TimeGeometry *outputTimeGeometry, const TOutputRegion &outputRegion, const mitk::TimeGeometry *inputTimeGeometry, TInputRegion &inputRegion)
InputImageType * GetInput(void)
void _InternalComputeClippedImage(itk::Image< TPixel, VImageDimension > *itkImage, mitk::GeometryClipImageFilter *geometryClipper, const mitk::PlaneGeometry *clippingPlaneGeometry)
virtual ScalarType GetBelowGeometryLabel() const
virtual bool IsInitialized() const
Check whether the data has been initialized, i.e., at least the Geometry and other header data has be...
mitk::BaseGeometry::ConstPointer m_ClippingGeometry
virtual BaseGeometry::Pointer GetGeometryForTimeStep(TimeStepType timeStep) const =0
Returns the geometry which corresponds to the given time step.
OutputType * GetOutput()
Get the output data of this image source object.
Describes a two-dimensional, rectangular plane.
#define AccessByItk_2(mitkImage, itkImageTypeFunction, arg1, arg2)
mitk::TimeGeometry::ConstPointer m_TimeClippingGeometry
virtual ScalarType GetAboveGeometryLabel() const
BaseGeometry Describes the geometry of a data object.
Filter for clipping an image with a PlaneGeometry.