13 #ifndef mitkLabelSetImage_h
14 #define mitkLabelSetImage_h
16 #include <shared_mutex>
246 std::vector<std::string> GetLabelClassNames()
const;
252 std::vector<std::string> GetLabelClassNamesByGroup(
GroupIndexType index)
const;
260 itkGetConstMacro(UnlabeledLabelLock,
bool);
261 itkSetMacro(UnlabeledLabelLock,
bool);
262 itkBooleanMacro(UnlabeledLabelLock);
266 void SetAllLabelsVisible(
bool visible);
271 void SetAllLabelsVisibleByGroup(
GroupIndexType group,
bool visible);
277 void SetAllLabelsVisibleByName(
GroupIndexType group,
const std::string_view name,
bool visible);
285 void SetAllLabelsLocked(
bool locked);
290 void SetAllLabelsLockedByGroup(
GroupIndexType group,
bool locked);
296 void SetAllLabelsLockedByName(
GroupIndexType group,
const std::string_view name,
bool locked);
326 void UpdateLookupTable(
PixelType pixelValue);
330 void OnLabelModified(
const Object* sender,
const itk::EventObject&);
336 void RegisterLabel(
Label* label);
338 void ReleaseLabel(
Label* label);
351 using LabelMapType = std::map<LabelValueType, Label::Pointer>;
353 LabelMapType m_LabelMap;
355 using GroupNameVectorType = std::vector<std::string>;
357 GroupNameVectorType m_Groups;
361 using GroupToLabelMapType = std::vector<LabelValueVectorType>;
363 GroupToLabelMapType m_GroupToLabelMap;
364 using LabelToGroupMapType = std::map<LabelValueType, GroupIndexType>;
366 LabelToGroupMapType m_LabelToGroupMap;
368 using LabelEventGuardMapType = std::map<LabelValueType, ITKEventObserverGuard>;
369 LabelEventGuardMapType m_LabelModEventGuardMap;
374 bool m_UnlabeledLabelLock;
377 std::shared_mutex m_LabelNGroupMapsMutex;
389 void UpdateCenterOfMass(
PixelType pixelValue);
397 void Initialize(
const mitk::Image *image)
override;
417 void MergeLabels(
PixelType pixelValue,
const std::vector<PixelType>& vectorOfSourcePixelValues);
424 unsigned int GetActiveLayer()
const;
426 Label* GetActiveLabel();
428 const Label* GetActiveLabel()
const;
435 unsigned int GetNumberOfLabels(
unsigned int layer)
const;
441 unsigned int GetTotalNumberOfLabels()
const;
454 void MaskStamp(
mitk::Image *mask,
bool forceOverwrite);
456 void SetActiveLayer(
unsigned int layer);
459 unsigned int GetNumberOfLayers()
const;
480 LabelSetImage(
const LabelSetImage &other);
481 ~LabelSetImage()
override;
483 template <
typename TPixel,
unsigned int VImageDimension>
484 void LayerContainerToImageProcessing(itk::Image<TPixel, VImageDimension> *source,
unsigned int layer);
486 template <
typename TPixel,
unsigned int VImageDimension>
487 void ImageToLayerContainerProcessing(itk::Image<TPixel, VImageDimension> *source,
unsigned int layer)
const;
489 template <
typename ImageType>
490 void CalculateCenterOfMassProcessing(ImageType *input, LabelValueType index);
492 template <
typename ImageType>
493 void EraseLabelProcessing(ImageType *input, PixelType index);
495 template <
typename ImageType>
496 void MergeLabelProcessing(ImageType *input, PixelType pixelValue, PixelType index);
498 template <
typename ImageType>
499 void MaskStampProcessing(ImageType *input,
mitk::Image *mask,
bool forceOverwrite);
501 template <
typename LabelSetImageType,
typename ImageType>
502 void InitializeByLabeledImageProcessing(LabelSetImageType *input, ImageType *other);
506 LabelValueVectorType GetUsedLabelValues()
const;
559 namespace MultiLabelSegmentation
648 bool destinationBackgroundLocked =
false,
660 bool destinationBackgroundLocked =
false,