Medical Imaging Interaction Toolkit  2026.06.00
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_h
14 #define mitkPlanarFigureMaskGenerator_h
15 
17 #include <itkImage.h>
18 #include <mitkImage.h>
19 #include <mitkMaskGenerator.h>
20 #include <mitkPlanarFigure.h>
21 #include <vtkSmartPointer.h>
22 
23 namespace mitk
24 {
30  {
31  public:
37 
39  itkNewMacro(Self);
41 
46  unsigned int GetNumberOfMasks() const override;
47 
57  void SetPlanarFigure(mitk::PlanarFigure* planarFigure);
58 
67  mitk::Image::ConstPointer GetReferenceImage() override;
68 
70  itkGetConstMacro(PlanarFigureAxis, unsigned int);
71 
73  itkGetConstMacro(PlanarFigureSlice, unsigned int);
74 
89  static bool CheckPlanarFigureIsNotTilted(const PlaneGeometry* planarGeometry, const BaseGeometry *geometry);
90 
91  protected:
93  : Superclass(),
94  m_ReferenceImage(nullptr),
95  m_PlanarFigureAxis(0),
96  m_InternalMaskUpdateTime(0),
97  m_PlanarFigureSlice(0)
98  {
99  m_InternalMask = mitk::Image::New();
100  }
101 
102  Image::ConstPointer DoGetMask(unsigned int) override;
103 
104  private:
105  void CalculateMask();
106 
107  template <typename TPixel, unsigned int VImageDimension>
108  void InternalCalculateMaskFromClosedPlanarFigure(const itk::Image<TPixel, VImageDimension> *image, unsigned int axis);
109 
110  template <typename TPixel, unsigned int VImageDimension>
111  void InternalCalculateMaskFromOpenPlanarFigure(const itk::Image<TPixel, VImageDimension> *image, unsigned int axis);
112 
113  mitk::Image::ConstPointer Extract2DImageSlice(const Image* input, unsigned int axis, unsigned int slice) const;
114 
116  static bool GetPrincipalAxis(const BaseGeometry *geometry, Vector3D vector, unsigned int &axis);
117 
119  template <typename ITK_Exporter, typename VTK_Importer>
120  void ConnectPipelines(ITK_Exporter exporter, vtkSmartPointer<VTK_Importer> importer)
121  {
122  importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
123 
124  importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
125  importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
126  importer->SetSpacingCallback(exporter->GetSpacingCallback());
127  importer->SetOriginCallback(exporter->GetOriginCallback());
128  importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
129 
130  importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
131 
132  importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
133  importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
134  importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
135  importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
136  importer->SetCallbackUserData(exporter->GetCallbackUserData());
137  }
138 
140  template <typename VTK_Exporter, typename ITK_Importer>
141  void ConnectPipelines(vtkSmartPointer<VTK_Exporter> exporter, ITK_Importer importer)
142  {
143  importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
144 
145  importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
146  importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
147  importer->SetSpacingCallback(exporter->GetSpacingCallback());
148  importer->SetOriginCallback(exporter->GetOriginCallback());
149  importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
150 
151  importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
152 
153  importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
154  importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
155  importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
156  importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
157  importer->SetCallbackUserData(exporter->GetCallbackUserData());
158  }
159 
160  bool IsUpdateRequired() const;
161 
162  mitk::PlanarFigure::Pointer m_PlanarFigure;
163  itk::Image<unsigned short, 2>::Pointer m_InternalITKImageMask2D;
164  mitk::Image::ConstPointer m_ReferenceImage;
165  unsigned int m_PlanarFigureAxis;
166  unsigned long m_InternalMaskUpdateTime;
167  unsigned int m_PlanarFigureSlice;
168  mitk::Image::Pointer m_InternalMask;
169  };
170 
171 } // namespace mitk
172 
173 #endif
#define MITKIMAGESTATISTICS_EXPORT
Abstract base class describing the geometry of a data object.
Image class for storing multi-dimensional medical image data.
Definition: mitkImage.h:76
static Pointer New()
Abstract base class for all mask generators used in image statistics.
Derived from MaskGenerator. This class is used to convert a mitk::PlanarFigure into a binary image ma...
void SetPlanarFigure(mitk::PlanarFigure *planarFigure)
Set the planar figure used to define the mask region.
static bool CheckPlanarFigureIsNotTilted(const PlaneGeometry *planarGeometry, const BaseGeometry *geometry)
Check whether a planar figure's plane is axis-aligned with a geometry.
unsigned int GetNumberOfMasks() const override
Get the number of masks this generator provides.
mitk::Image::ConstPointer GetReferenceImage() override
Get the reference image for this mask.
Image::ConstPointer DoGetMask(unsigned int) override
Must be overridden by derived classes to generate the requested mask.
itk::SmartPointer< const Self > ConstPointer
Base-class for geometric planar (2D) figures, such as lines, circles, rectangles, polygons,...
Describes the geometry of a plane object.
Find image slices visible on a given plane.