13 #ifndef mitkLabelSetImage_h
14 #define mitkLabelSetImage_h
16 #include <shared_mutex>
268 std::vector<std::string> GetLabelClassNames()
const;
274 std::vector<std::string> GetLabelClassNamesByGroup(
GroupIndexType index)
const;
282 itkGetConstMacro(UnlabeledLabelLock,
bool);
283 itkSetMacro(UnlabeledLabelLock,
bool);
284 itkBooleanMacro(UnlabeledLabelLock);
288 void SetAllLabelsVisible(
bool visible);
293 void SetAllLabelsVisibleByGroup(
GroupIndexType group,
bool visible);
299 void SetAllLabelsVisibleByName(
GroupIndexType group,
const std::string_view name,
bool visible);
307 void SetAllLabelsLocked(
bool locked);
312 void SetAllLabelsLockedByGroup(
GroupIndexType group,
bool locked);
318 void SetAllLabelsLockedByName(
GroupIndexType group,
const std::string_view name,
bool locked);
351 void SetGroupName(
GroupIndexType groupID,
const std::string& name);
358 void UpdateLookupTable(
PixelType pixelValue);
362 void OnLabelModified(
const Object* sender,
const itk::EventObject&);
368 void RegisterLabel(
Label* label);
370 void ReleaseLabel(
Label* label);
383 using LabelMapType = std::map<LabelValueType, Label::Pointer>;
385 LabelMapType m_LabelMap;
387 using GroupNameVectorType = std::vector<std::string>;
389 GroupNameVectorType m_Groups;
393 using GroupToLabelMapType = std::vector<LabelValueVectorType>;
395 GroupToLabelMapType m_GroupToLabelMap;
396 using LabelToGroupMapType = std::map<LabelValueType, GroupIndexType>;
398 LabelToGroupMapType m_LabelToGroupMap;
400 using LabelEventGuardMapType = std::map<LabelValueType, ITKEventObserverGuard>;
401 LabelEventGuardMapType m_LabelModEventGuardMap;
406 bool m_UnlabeledLabelLock;
409 std::shared_mutex m_LabelNGroupMapsMutex;
428 void UpdateCenterOfMass(
PixelType pixelValue);
436 void Initialize(
const mitk::Image *image)
override;
456 void MergeLabels(
PixelType pixelValue,
const std::vector<PixelType>& vectorOfSourcePixelValues);
463 unsigned int GetActiveLayer()
const;
465 Label* GetActiveLabel();
467 const Label* GetActiveLabel()
const;
474 unsigned int GetNumberOfLabels(
unsigned int layer)
const;
480 unsigned int GetTotalNumberOfLabels()
const;
490 void MaskStamp(
mitk::Image *mask,
bool forceOverwrite);
492 void SetActiveLayer(
unsigned int layer);
495 unsigned int GetNumberOfLayers()
const;
519 LabelSetImage(
const LabelSetImage &other);
520 ~LabelSetImage()
override;
522 template <
typename TPixel,
unsigned int VImageDimension>
523 void LayerContainerToImageProcessing(itk::Image<TPixel, VImageDimension> *source,
unsigned int layer);
525 template <
typename TPixel,
unsigned int VImageDimension>
526 void ImageToLayerContainerProcessing(
const itk::Image<TPixel, VImageDimension> *source,
unsigned int layer)
const;
528 template <
typename ImageType>
529 void CalculateCenterOfMassProcessing(ImageType *input, LabelValueType index);
531 template <
typename ImageType>
532 void EraseLabelProcessing(ImageType *input, PixelType index);
534 template <
typename ImageType>
535 void MergeLabelProcessing(ImageType *input, PixelType pixelValue, PixelType index);
537 template <
typename ImageType>
538 void MaskStampProcessing(ImageType *input,
mitk::Image *mask,
bool forceOverwrite);
540 template <
typename LabelSetImageType,
typename ImageType>
541 void InitializeByLabeledImageProcessing(LabelSetImageType *input, ImageType *other);
545 LabelValueVectorType GetUsedLabelValues()
const;
598 namespace MultiLabelSegmentation
687 bool destinationBackgroundLocked =
false,
699 bool destinationBackgroundLocked =
false,