Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkPlanarFigureMaskGenerator.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef MITKPLANARFIGUREMASKGENERATOR
14 #define MITKPLANARFIGUREMASKGENERATOR
15 
17 #include <itkImage.h>
18 #include <itkVTKImageExport.h>
19 #include <itkVTKImageImport.h>
20 #include <mitkImage.h>
21 #include <mitkMaskGenerator.h>
22 #include <mitkPlanarFigure.h>
23 #include <vtkImageExport.h>
24 #include <vtkImageImport.h>
25 #include <vtkSmartPointer.h>
26 
27 namespace mitk
28 {
34  {
35  public:
41 
43  itkNewMacro(Self);
45 
50  mitk::Image::Pointer GetMask() override;
51 
52  void SetPlanarFigure(mitk::PlanarFigure::Pointer planarFigure);
53 
54  mitk::Image::ConstPointer GetReferenceImage() override;
55 
60  void SetTimeStep(unsigned int timeStep) override;
61 
62  itkGetConstMacro(PlanarFigureAxis, unsigned int);
63  itkGetConstMacro(PlanarFigureSlice, unsigned int);
64 
67  static bool CheckPlanarFigureIsNotTilted(const PlaneGeometry* planarGeometry, const BaseGeometry *geometry);
68 
69  protected:
71  : Superclass(),
72  m_ReferenceImage(nullptr),
73  m_PlanarFigureAxis(0),
74  m_InternalMaskUpdateTime(0),
75  m_PlanarFigureSlice(0)
76  {
77  m_InternalMask = mitk::Image::New();
78  }
79 
80  private:
81  void CalculateMask();
82 
83  template <typename TPixel, unsigned int VImageDimension>
84  void InternalCalculateMaskFromPlanarFigure(const itk::Image<TPixel, VImageDimension> *image, unsigned int axis);
85 
86  template <typename TPixel, unsigned int VImageDimension>
87  void InternalCalculateMaskFromOpenPlanarFigure(const itk::Image<TPixel, VImageDimension> *image, unsigned int axis);
88 
89  mitk::Image::ConstPointer extract2DImageSlice(unsigned int axis, unsigned int slice);
90 
92  static bool GetPrincipalAxis(const BaseGeometry *geometry, Vector3D vector, unsigned int &axis);
93 
95  template <typename ITK_Exporter, typename VTK_Importer>
96  void ConnectPipelines(ITK_Exporter exporter, vtkSmartPointer<VTK_Importer> importer)
97  {
98  importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
99 
100  importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
101  importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
102  importer->SetSpacingCallback(exporter->GetSpacingCallback());
103  importer->SetOriginCallback(exporter->GetOriginCallback());
104  importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
105 
106  importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
107 
108  importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
109  importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
110  importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
111  importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
112  importer->SetCallbackUserData(exporter->GetCallbackUserData());
113  }
114 
116  template <typename VTK_Exporter, typename ITK_Importer>
117  void ConnectPipelines(vtkSmartPointer<VTK_Exporter> exporter, ITK_Importer importer)
118  {
119  importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
120 
121  importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
122  importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
123  importer->SetSpacingCallback(exporter->GetSpacingCallback());
124  importer->SetOriginCallback(exporter->GetOriginCallback());
125  importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
126 
127  importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
128 
129  importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
130  importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
131  importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
132  importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
133  importer->SetCallbackUserData(exporter->GetCallbackUserData());
134  }
135 
136  bool IsUpdateRequired() const;
137 
138  mitk::PlanarFigure::Pointer m_PlanarFigure;
139  itk::Image<unsigned short, 2>::Pointer m_InternalITKImageMask2D;
140  mitk::Image::ConstPointer m_InternalTimeSliceImage;
141  mitk::Image::ConstPointer m_ReferenceImage;
142  unsigned int m_PlanarFigureAxis;
143  unsigned long m_InternalMaskUpdateTime;
144  unsigned int m_PlanarFigureSlice;
145  };
146 
147 } // namespace mitk
148 
149 #endif // MITKPLANARFIGUREMASKGENERATOR
Base Class for all Mask Generators. Mask generators are classes that provide functionality for the cr...
DataCollection - Class to facilitate loading/accessing structured data.
#define MITKIMAGESTATISTICS_EXPORT
itk::SmartPointer< const Self > ConstPointer
mitk::Image::Pointer image
static Pointer New()
Derived from MaskGenerator. This class is used to convert a mitk::PlanarFigure into a binary image ma...
Describes a two-dimensional, rectangular plane.
BaseGeometry Describes the geometry of a data object.