Medical Imaging Interaction Toolkit  2025.08.00
Medical Imaging Interaction Toolkit
mitkTotalSegmentatorTool.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 #ifndef MITKTOTALSEGMENTATORTOOL_H
13 #define MITKTOTALSEGMENTATORTOOL_H
14 
15 #include "mitkSegWithPreviewTool.h"
17 #include "mitkProcessExecutor.h"
18 
19 
20 namespace us
21 {
22  class ModuleResource;
23 }
24 
25 namespace mitk
26 {
27 
37  {
38  public:
40  itkFactorylessNewMacro(Self);
41  itkCloneMacro(Self);
42 
43  const char *GetName() const override;
44  const char **GetXPM() const override;
45  us::ModuleResource GetIconResource() const override;
46  void Activated() override;
47 
48  itkSetMacro(MitkTempDir, std::string);
49  itkGetConstMacro(MitkTempDir, std::string);
50 
51  itkSetMacro(SubTask, std::string);
52  itkGetConstMacro(SubTask, std::string);
53 
54  itkSetMacro(PythonPath, std::string);
55  itkGetConstMacro(PythonPath, std::string);
56 
57  itkSetMacro(GpuId, int);
58  itkGetConstMacro(GpuId, int);
59 
60  itkSetMacro(Fast, bool);
61  itkGetConstMacro(Fast, bool);
62  itkBooleanMacro(Fast);
63 
68 
69  protected:
72 
87  void DoUpdatePreview(const Image* inputAtTimeStep, const Image* oldSegAtTimeStep, MultiLabelSegmentation* previewImage, TimeStepType timeStep) override;
88  void UpdatePrepare() override;
89 
90  private:
91 
96  void run_totalsegmentator(ProcessExecutor*, const std::string&, const std::string&, bool, bool, int, const std::string&);
97 
102  void MapLabelsToSegmentation(const mitk::MultiLabelSegmentation*, mitk::MultiLabelSegmentation*, std::map<mitk::Label::PixelType, std::string>&);
103 
109  void ParseLabelMapTotalDefault();
110 
116  std::string GetLabelMapPath();
117 
127  MultiLabelSegmentation::Pointer AgglomerateLabelFiles(std::vector<std::string>& filePaths, const unsigned int* dimension, mitk::BaseGeometry* geometry);
128 
132  void PythonProcessEvent(itk::Object*, const itk::EventObject &e);
133 
134  std::string m_MitkTempDir;
135  std::string m_PythonPath;
136  std::string m_SubTask = "total";
137  int m_GpuId = 0;
138  std::map<mitk::Label::PixelType, std::string> m_LabelMapTotal;
139  std::map<mitk::Label::PixelType, std::string> m_LabelMapTotalMR;
140  bool m_Fast = true;
141  const std::string TEMPLATE_FILENAME = "XXXXXX_000_0000.nii.gz";
142  const std::string DEFAULT_TOTAL_TASK = "total";
143  const std::string DEFAULT_TOTAL_TASK_MRI = "total_mr";
144  const std::unordered_map<std::string, std::vector<std::string>> SUBTASKS_MAP =
145  {
146  {"body", { "body.nii.gz", "body_trunc.nii.gz", "body_extremities.nii.gz", "skin.nii.gz"}},
147  {"hip_implant", {"hip_implant.nii.gz"}},
148  {"cerebral_bleed", {"intracerebral_hemorrhage.nii.gz"}},
149  {"lung_vessels", {"lung_vessels.nii.gz", "lung_trachea_bronchia.nii.gz"}},
150  {"pleural_pericard_effusion", {"pleural_effusion.nii.gz", "pericardial_effusion.nii.gz"}},
151  {"head_glands_cavities", {"eye_left.nii.gz", "eye_right.nii.gz", "eye_lens_left.nii.gz", "eye_lens_right.nii.gz", "optic_nerve_left.nii.gz", "optic_nerve_right.nii.gz", "parotid_gland_left.nii.gz", "parotid_gland_right.nii.gz", "submandibular_gland_right.nii.gz", "submandibular_gland_left.nii.gz", "nasopharynx.nii.gz", "oropharynx.nii.gz", "hypopharynx.nii.gz", "nasal_cavity_right.nii.gz", "nasal_cavity_left.nii.gz", "auditory_canal_right.nii.gz", "auditory_canal_left.nii.gz", "soft_palate.nii.gz", "hard_palate.nii.gz" }},
152  {"head_muscles", {"masseter_right.nii.gz", "masseter_left.nii.gz", "temporalis_right.nii.gz", "temporalis_left.nii.gz", "lateral_pterygoid_right.nii.gz", "lateral_pterygoid_left.nii.gz", "medial_pterygoid_right.nii.gz", "medial_pterygoid_left.nii.gz", "tongue.nii.gz", "digastric_right.nii.gz", "digastric_left.nii.gz"}},
153  {"headneck_bones_vessels", {"larynx_air.nii.gz" , "thyroid_cartilage.nii.gz" , "hyoid.nii.gz" , "cricoid_cartilage.nii.gz", "zygomatic_arch_right.nii.gz", "zygomatic_arch_left.nii.gz", "styloid_process_right.nii.gz", "styloid_process_left.nii.gz", "internal_carotid_artery_right.nii.gz", "internal_carotid_artery_left.nii.gz", "internal_jugular_vein_right.nii.gz", "internal_jugular_vein_left.nii.gz"}},
154  {"headneck_muscles", {"sternocleidomastoid_right.nii.gz", "sternocleidomastoid_left.nii.gz", "superior_pharyngeal_constrictor.nii.gz", "middle_pharyngeal_constrictor.nii.gz", "inferior_pharyngeal_constrictor.nii.gz", "trapezius_right.nii.gz", "trapezius_left.nii.gz", "platysma_right.nii.gz", "platysma_left.nii.gz", "levator_scapulae_right.nii.gz", "levator_scapulae_left.nii.gz", "anterior_scalene_right.nii.gz", "anterior_scalene_left.nii.gz", "middle_scalene_right.nii.gz", "middle_scalene_left.nii.gz", "posterior_scalene_right.nii.gz", "posterior_scalene_left.nii.gz", "sterno_thyroid_right.nii.gz", "sterno_thyroid_left.nii.gz", "thyrohyoid_right.nii.gz", "thyrohyoid_left.nii.gz", "prevertebral_right.nii.gz", "prevertebral_left.nii.gz"}},
155  {"liver_vessels", {"liver_vessels.nii.gz" , "liver_tumor.nii.gz"}},
156  {"oculomotor_muscles", {"skull.nii.gz", "eyeball_right.nii.gz", "lateral_rectus_muscle_right.nii.gz", "superior_oblique_muscle_right.nii.gz", "levator_palpebrae_superioris_right.nii.gz", "superior_rectus_muscle_right.nii.gz", "medial_rectus_muscle_left.nii.gz", "inferior_oblique_muscle_right.nii.gz", "inferior_rectus_muscle_right.nii.gz", "optic_nerve_left.nii.gz", "eyeball_left.nii.gz", "lateral_rectus_muscle_left.nii.gz", "superior_oblique_muscle_left.nii.gz", "levator_palpebrae_superioris_left.nii.gz", "superior_rectus_muscle_left.nii.gz", "medial_rectus_muscle_right.nii.gz", "inferior_oblique_muscle_left.nii.gz", "inferior_rectus_muscle_left.nii.gz", "optic_nerve_right.nii.gz"}},
157  {"lung_nodules", {"lung.nii.gz", "lung_nodules.nii.gz", }},
158  {"kidney_cysts", {"kidney_cyst_left.nii.gz", "kidney_cyst_right.nii.gz"}},
159  {"breasts", {"breast.nii.gz"}},
160  {"liver_segments", {"liver_segment_1.nii.gz", "liver_segment_2.nii.gz", "liver_segment_3.nii.gz", "liver_segment_4.nii.gz", "liver_segment_5.nii.gz", "liver_segment_6.nii.gz", "liver_segment_7.nii.gz", "liver_segment_8.nii.gz"}},
161  {"liver_segments_mr", {"liver_segment_1.nii.gz", "liver_segment_2.nii.gz", "liver_segment_3.nii.gz", "liver_segment_4.nii.gz", "liver_segment_5.nii.gz", "liver_segment_6.nii.gz", "liver_segment_7.nii.gz", "liver_segment_8.nii.gz"}},
162  {"craniofacial_structures", {"mandible.nii.gz", "teeth_lower.nii.gz", "skull.nii.gz", "head.nii.gz", "sinus_maxillary.nii.gz", "sinus_frontal.nii.gz", "teeth_upper.nii.gz"}}
163  };
164  }; // class
165 } // namespace
166 #endif
mitk::SegWithPreviewTool
Base class for any auto segmentation tool that provides a preview of the new segmentation.
Definition: mitkSegWithPreviewTool.h:38
mitk::TotalSegmentatorTool::TotalSegDownloadMessageEvent
mitk::Message1< const bool > TotalSegDownloadMessageEvent
Event triggered after model download started.
Definition: mitkTotalSegmentatorTool.h:62
mitk::Message1< const bool >
mitkProcessExecutor.h
us
Definition: mitkAbstractFileReader.h:29
mitkSegWithPreviewTool.h
mitk::Image
Image class for storing images.
Definition: mitkImage.h:69
itk::SmartPointer< Self >
mitk
Find image slices visible on a given plane.
Definition: RenderingTests.dox:1
mitk::EventStateMachine
‍**
Definition: mitkEventStateMachine.h:111
mitk::BaseGeometry
BaseGeometry Describes the geometry of a data object.
Definition: mitkBaseGeometry.h:94
mitk::MultiLabelSegmentation
MultiLabelSegmentation class for handling labels and layers in a segmentation session.
Definition: mitkLabelSetImage.h:43
MITKSEGMENTATION_EXPORT
#define MITKSEGMENTATION_EXPORT
Definition: MitkSegmentationExports.h:15
us::ModuleResource
Definition: usModuleResource.h:55
mitk::TimeStepType
std::size_t TimeStepType
Definition: mitkTimeGeometry.h:27
mitkClassMacro
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:36
MitkSegmentationExports.h
mitk::ProcessExecutor
You may register an observer for an ExternalProcessOutputEvent, ExternalProcessStdOutEvent or Externa...
Definition: mitkProcessExecutor.h:67
mitk::TotalSegmentatorTool
TotalSegmentator segmentation tool.
Definition: mitkTotalSegmentatorTool.h:36