24 #include <itkImageRegionIterator.h> 25 #include <itkImageSliceIteratorWithIndex.h> 33 m_CreateUndoInformation(false)
35 MITK_WARN <<
"Class is deprecated! Use mitkVtkImageOverwrite instead.";
62 if (input.IsNull() || slice.IsNull())
82 if (slice->GetDimension() < 2 || input->GetDimension() > 4 ||
83 slice->GetDimension(0) != input->GetDimension(
m_Dimension0) ||
84 slice->GetDimension(1) != input->GetDimension(
m_Dimension1) ||
87 itkExceptionMacro(
"Slice and image dimensions differ or slice index is too large. Sorry, cannot work like this.");
91 if (input->GetDimension() == 4)
94 timeSelector->SetInput(input);
96 timeSelector->UpdateLargestPossibleRegion();
97 input3D = timeSelector->GetOutput();
104 mitk::PixelType pixelType(mitk::MakeScalarPixelType<short signed int>());
125 const_cast<Image *>(input.GetPointer()),
131 const_cast<Image *>(input.GetPointer()),
136 undoOp->SetFactor(-1.0);
156 #define myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, itkImageTypeFunction, pixeltype, dimension, itkimage2) \ 157 if (typeId == MapPixelComponentType<pixeltype>::value) \ 160 typedef itk::Image<pixeltype, dimension> ImageType; \ 161 typedef mitk::ImageToItk<ImageType> ImageToItkType; \ 162 itk::SmartPointer<ImageToItkType> imagetoitk = ImageToItkType::New(); \ 163 const mitk::Image *constImage = mitkImage; \ 164 mitk::Image *nonConstImage = const_cast<mitk::Image *>(constImage); \ 165 nonConstImage->Update(); \ 166 imagetoitk->SetInput(nonConstImage); \ 167 imagetoitk->Update(); \ 168 itkImageTypeFunction(imagetoitk->GetOutput(), itkimage2); \ 172 #define myMITKOverwriteSliceImageFilterAccessAllTypesByItk(mitkImage, itkImageTypeFunction, dimension, itkimage2) \ 175 myMITKOverwriteSliceImageFilterAccessByItk( \ 177 itkImageTypeFunction, \ 180 itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, \ 181 itkImageTypeFunction, \ 184 itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, itkImageTypeFunction, int, dimension, itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, itkImageTypeFunction, unsigned int, dimension, itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, \ 185 itkImageTypeFunction, \ 188 itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, itkImageTypeFunction, unsigned short, dimension, itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, \ 189 itkImageTypeFunction, \ 192 itkimage2) else myMITKOverwriteSliceImageFilterAccessByItk(mitkImage, \ 193 itkImageTypeFunction, \ 200 template <
typename TPixel,
unsigned int VImageDimension>
203 const int typeId =
m_SliceImage->GetPixelType().GetComponentType();
208 template <
typename TPixel1,
unsigned int VImageDimension1,
typename TPixel2,
unsigned int VImageDimension2>
210 itk::Image<TPixel2, VImageDimension2> *outputImage)
212 typedef itk::Image<TPixel1, VImageDimension1> SliceImageType;
213 typedef itk::Image<short signed int, VImageDimension1> DiffImageType;
214 typedef itk::Image<TPixel2, VImageDimension2> VolumeImageType;
216 typedef itk::ImageSliceIteratorWithIndex<VolumeImageType> OutputSliceIteratorType;
217 typedef itk::ImageRegionConstIterator<SliceImageType> InputSliceIteratorType;
218 typedef itk::ImageRegionIterator<DiffImageType> DiffSliceIteratorType;
220 typename VolumeImageType::RegionType sliceInVolumeRegion;
222 sliceInVolumeRegion = outputImage->GetLargestPossibleRegion();
226 OutputSliceIteratorType outputIterator(outputImage, sliceInVolumeRegion);
230 InputSliceIteratorType inputIterator(inputImage, inputImage->GetLargestPossibleRegion());
232 typename DiffImageType::Pointer diffImage;
234 DiffSliceIteratorType diffIterator(diffImage, diffImage->GetLargestPossibleRegion());
237 outputIterator.GoToBegin();
238 inputIterator.GoToBegin();
239 diffIterator.GoToBegin();
240 while (!outputIterator.IsAtEnd())
242 while (!outputIterator.IsAtEndOfSlice())
244 while (!outputIterator.IsAtEndOfLine())
246 diffIterator.Set(static_cast<short signed int>(inputIterator.Get() -
247 outputIterator.Get()));
248 outputIterator.Set((TPixel2)inputIterator.Get());
253 outputIterator.NextLine();
255 outputIterator.NextSlice();
260 unsigned int sliceIndex,
261 unsigned int timeStep)
265 s <<
"Changed slice (";
267 switch (sliceDimension)
281 s <<
" " << sliceIndex <<
" " << timeStep <<
")";
void ItkImageProcessing(const itk::Image< TPixel1, VImageDimension1 > *itkImage1, itk::Image< TPixel2, VImageDimension2 > *itkImage2)
Operation, that holds information about some image difference.
#define AccessFixedDimensionByItk(mitkImage, itkImageTypeFunction, dimension)
Access a mitk-image with known dimension by an itk-image.
void SetChangedSlice(const Image *sliceDiff, unsigned int sliceDimension, unsigned int sliceIndex, unsigned int timeStep)
Update after changing a single slice.
Generates interpolations of 2D slices.
Constants for most interaction classes, due to the generic StateMachines.
unsigned int m_SliceDimension
void BlockModified(bool)
Block reaction to an images Modified() events.
~OverwriteSliceImageFilter() override
#define myMITKOverwriteSliceImageFilterAccessAllTypesByItk(mitkImage, itkImageTypeFunction, dimension, itkimage2)
static DiffImageApplier * GetInstanceForUndo()
std::string EventDescription(unsigned int sliceDimension, unsigned int sliceIndex, unsigned int timeStep)
Image::Pointer m_SliceDifferenceImage
unsigned int m_Dimension1
void GenerateData() override
static SegmentationInterpolationController * InterpolatorForImage(const Image *)
Find interpolator for a given image.
Image::ConstPointer m_SliceImage
bool m_CreateUndoInformation
InputImageType * GetInput(void)
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
virtual bool SetOperationEvent(UndoStackItem *stackItem)=0
static UndoModel * GetCurrentUndoModel()
gives access to the currently used UndoModel Introduced to access special functions of more specific ...
static void IncCurrObjectEventId()
Increases the current ObjectEventId For example if a button click generates operations the ObjectEven...
unsigned int m_Dimension0
void ItkImageSwitch(itk::Image< TPixel, VImageDimension > *image)
OverwriteSliceImageFilter()
Represents a pair of operations: undo and the according redo.
Class for defining the data type of pixels.
unsigned int m_SliceIndex