Medical Imaging Interaction Toolkit  2024.06.00
Medical Imaging Interaction Toolkit
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
mitkSegWithPreviewTool.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 mitkSegWithPreviewTool_h
14 #define mitkSegWithPreviewTool_h
15 
16 #include "mitkTool.h"
17 #include "mitkCommon.h"
18 #include "mitkDataNode.h"
19 #include "mitkToolCommand.h"
21 
22 namespace mitk
23 {
39  {
40  public:
41 
43 
44  void Activated() override;
45  void Deactivated() override;
46 
47  void ConfirmSegmentation();
48 
49  itkSetMacro(CreateAllTimeSteps, bool);
50  itkGetMacro(CreateAllTimeSteps, bool);
51  itkBooleanMacro(CreateAllTimeSteps);
52 
53  itkSetMacro(KeepActiveAfterAccept, bool);
54  itkGetMacro(KeepActiveAfterAccept, bool);
55  itkBooleanMacro(KeepActiveAfterAccept);
56 
57  itkSetMacro(IsTimePointChangeAware, bool);
58  itkGetMacro(IsTimePointChangeAware, bool);
59  itkBooleanMacro(IsTimePointChangeAware);
60 
61  itkSetMacro(ResetsToEmptyPreview, bool);
62  itkGetMacro(ResetsToEmptyPreview, bool);
63  itkBooleanMacro(ResetsToEmptyPreview);
64 
65  itkSetMacro(UseSpecialPreviewColor, bool);
66  itkGetMacro(UseSpecialPreviewColor, bool);
67  itkBooleanMacro(UseSpecialPreviewColor);
68 
69  itkSetMacro(RequestDeactivationConfirmation, bool);
70  itkGetMacro(RequestDeactivationConfirmation, bool);
71  itkBooleanMacro(RequestDeactivationConfirmation);
72 
73  /*itk macro was not used on purpose, to avoid the change of mtime.*/
74  void SetMergeStyle(MultiLabelSegmentation::MergeStyle mergeStyle);
76 
77  /*itk macro was not used on purpose, to avoid the change of mtime.*/
78  void SetOverwriteStyle(MultiLabelSegmentation::OverwriteStyle overwriteStyle);
80 
81  enum class LabelTransferScope
82  {
83  ActiveLabel, //Only the selected label will be transferred from the preview segmentation
84  //to the result segmentation.
85  //If this mode is selected the class expects that GetSelectedLabels indicate
86  //the label in the preview.
87  SelectedLabels, //The labels defined as selected labels will be transferred.
88  AllLabels //Transfer all labels of the preview
89  };
90  /*itk macro was not used on purpose, to avoid the change of mtime.*/
91  void SetLabelTransferScope(LabelTransferScope labelTransferScope);
92  itkGetMacro(LabelTransferScope, LabelTransferScope);
93 
94  using SelectedLabelVectorType = std::vector<Label::PixelType>;
100  void SetSelectedLabels(const SelectedLabelVectorType& labelsToTransfer);
101  itkGetMacro(SelectedLabels, SelectedLabelVectorType);
102 
103  enum class LabelTransferMode
104  {
105  MapLabel, //Only the active label will be transferred from preview to segmentation.
106  AddLabel //The labels defined as selected labels will be transferred.
107  };
108  /*itk macro was not used on purpose, to avoid the change of mtime.*/
109  void SetLabelTransferMode(LabelTransferMode labelTransferMode);
110  itkGetMacro(LabelTransferMode, LabelTransferMode);
111 
112  bool CanHandle(const BaseData* referenceData, const BaseData* workingData) const override;
113 
121  void UpdatePreview(bool ignoreLazyPreviewSetting = false);
122 
124  bool IsUpdating() const;
125 
131  std::string GetCurrentSegmentationName();
132 
137  virtual DataNode* GetTargetSegmentationNode() const;
138  LabelSetImage* GetTargetSegmentation() const;
139 
142  LabelSetImage* GetPreviewSegmentation();
143  const LabelSetImage* GetPreviewSegmentation() const;
144  DataNode* GetPreviewSegmentationNode();
145 
146  protected:
148 
149  SegWithPreviewTool(bool lazyDynamicPreviews = false); // purposely hidden
150  SegWithPreviewTool(bool lazyDynamicPreviews, const char* interactorType, const us::Module* interactorModule = nullptr); // purposely hidden
151 
152  ~SegWithPreviewTool() override;
153 
154  const char* GetGroup() const override;
155 
157  static Image::ConstPointer GetImageByTimeStep(const Image* image, TimeStepType timestep);
159  static Image::Pointer GetImageByTimeStep(Image* image, TimeStepType timestep);
161  static Image::ConstPointer GetImageByTimePoint(const Image* image, TimePointType timePoint);
162 
163  void EnsureTargetSegmentationNodeInDataStorage() const;
164 
170  virtual void InitiateToolByInput();
171 
175  virtual void UpdatePrepare();
176 
180  virtual void UpdateCleanUp();
181 
185  virtual void ConfirmCleanUp();
186 
187  using LabelMappingType = std::vector<std::pair<Label::PixelType, Label::PixelType> >;
188 
197  virtual void PreparePreviewToResultTransfer(const LabelMappingType& labelMapping);
198 
199  static void TransferLabelInformation(const LabelMappingType& labelMapping,
200  const mitk::LabelSetImage* source, mitk::LabelSetImage* target);
201 
204  static void TransferLabelSetImageContent(const LabelSetImage* source, LabelSetImage* target, TimeStepType timeStep);
205 
212  virtual void DoUpdatePreview(const Image* inputAtTimeStep, const Image* oldSegAtTimeStep, LabelSetImage* previewImage, TimeStepType timeStep) = 0;
213 
219  const Image* GetSegmentationInput() const;
220 
223  const Image* GetReferenceData() const;
224 
229  void ResetPreviewNode();
230 
233  void ResetPreviewContent();
234 
237  void ResetPreviewContentAtTimeStep(unsigned int timeStep);
238 
239  TimePointType GetLastTimePointOfUpdate() const;
240 
241  LabelSetImage::LabelValueType GetActiveLabelValueOfPreview() const;
242 
243  itkGetConstMacro(UserDefinedActiveLabel, Label::PixelType);
244 
245  itkSetObjectMacro(WorkingPlaneGeometry, PlaneGeometry);
246  itkGetConstObjectMacro(WorkingPlaneGeometry, PlaneGeometry);
247 
248  bool ConfirmBeforeDeactivation() override;
249 
250  private:
251  void TransferImageAtTimeStep(const Image* sourceImage, Image* destinationImage, const TimeStepType timeStep, const LabelMappingType& labelMapping);
252 
253  void CreateResultSegmentationFromPreview();
254 
255  void OnRoiDataChanged();
256  void OnTimePointChanged();
257 
265  bool EnsureUpToDateUserDefinedActiveLabel();
266 
270  LabelMappingType GetLabelMapping() const;
271 
273  DataNode::Pointer m_PreviewSegmentationNode;
275  DataNode::Pointer m_ReferenceDataNode;
278  DataNode::Pointer m_SegmentationInputNode;
279 
282  bool m_CreateAllTimeSteps = false;
283 
285  bool m_KeepActiveAfterAccept = false;
286 
292  bool m_LazyDynamicPreviews = false;
293 
294  bool m_IsTimePointChangeAware = true;
295 
298  bool m_ResetsToEmptyPreview = false;
299 
302  bool m_UseSpecialPreviewColor = true;
303 
304  TimePointType m_LastTimePointOfUpdate = 0.;
305 
306  bool m_IsUpdating = false;
307 
308  Label::PixelType m_UserDefinedActiveLabel = 1;
309 
315  PlaneGeometry::Pointer m_WorkingPlaneGeometry;
316 
323 
324  LabelTransferScope m_LabelTransferScope = LabelTransferScope::ActiveLabel;
325  SelectedLabelVectorType m_SelectedLabels = {};
326 
327  LabelTransferMode m_LabelTransferMode = LabelTransferMode::MapLabel;
328 
329  bool m_IsPreviewGenerated = false;
330 
334  bool m_RequestDeactivationConfirmation = false;
335  };
336 
337 } // namespace
338 
339 #endif
mitk::SegWithPreviewTool
Base class for any auto segmentation tool that provides a preview of the new segmentation.
Definition: mitkSegWithPreviewTool.h:38
mitkTool.h
mitk::MultiLabelSegmentation::OverwriteStyle::RegardLocks
@ RegardLocks
mitk::SegWithPreviewTool::m_ProgressCommand
ToolCommand::Pointer m_ProgressCommand
Definition: mitkSegWithPreviewTool.h:147
mitk::PlaneGeometry
Describes a two-dimensional, rectangular plane.
Definition: mitkPlaneGeometry.h:78
mitk::Image
Image class for storing images.
Definition: mitkImage.h:69
itk::SmartPointer< Self >
mitk::Label::PixelType
unsigned short PixelType
Definition: mitkLabel.h:34
mitk::Tool
Base class of all tools used by mitk::ToolManager.
Definition: mitkTool.h:83
mitk
Find image slices visible on a given plane.
Definition: RenderingTests.dox:1
mitk::SegWithPreviewTool::LabelTransferScope
LabelTransferScope
Definition: mitkSegWithPreviewTool.h:81
mitk::MultiLabelSegmentation::MergeStyle::Replace
@ Replace
mitkToolCommand.h
mitk::MultiLabelSegmentation::MergeStyle
MergeStyle
Definition: mitkLabelSetImage.h:605
us::Module
Definition: usModule.h:78
mitkCommon.h
MITKSEGMENTATION_EXPORT
#define MITKSEGMENTATION_EXPORT
Definition: MitkSegmentationExports.h:15
mitk::SegWithPreviewTool::LabelTransferMode
LabelTransferMode
Definition: mitkSegWithPreviewTool.h:103
mitk::BaseData
Base of all data objects.
Definition: mitkBaseData.h:42
mitk::MultiLabelSegmentation::OverwriteStyle
OverwriteStyle
Definition: mitkLabelSetImage.h:613
mitkDataNode.h
mitk::TimeStepType
std::size_t TimeStepType
Definition: mitkTimeGeometry.h:27
mitkClassMacro
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:36
mitk::TimePointType
mitk::ScalarType TimePointType
Definition: mitkTimeGeometry.h:26
MitkSegmentationExports.h
mitk::SegWithPreviewTool::LabelMappingType
std::vector< std::pair< Label::PixelType, Label::PixelType > > LabelMappingType
Definition: mitkSegWithPreviewTool.h:187
mitk::SegWithPreviewTool::SelectedLabelVectorType
std::vector< Label::PixelType > SelectedLabelVectorType
Definition: mitkSegWithPreviewTool.h:94
mitk::DataNode
Class for nodes of the DataTree.
Definition: mitkDataNode.h:63
mitk::LabelSetImage
LabelSetImage class for handling labels and layers in a segmentation session.
Definition: mitkLabelSetImage.h:43
mitk::LabelSetImage::LabelValueType
mitk::Label::PixelType LabelValueType
Definition: mitkLabelSetImage.h:75