MCPcopy Create free account
hub / github.com/MITK/MITK / GetLabelMapping

Method GetLabelMapping

Modules/Segmentation/src/Interactions/mitkSegWithPreviewTool.cpp:366–426  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

364}
365
366mitk::SegWithPreviewTool::LabelMappingType mitk::SegWithPreviewTool::GetLabelMapping() const
367{
368 MultiLabelSegmentation::LabelValueType offset = 0;
369
370 if (LabelTransferMode::AddLabel == m_LabelTransferMode && LabelTransferScope::ActiveLabel!=m_LabelTransferScope)
371 {
372 //If we are not just working on active label and transfer mode is add, we need to compute an offset for adding the
373 //preview labels instat of just mapping them to existing segmentation labels.
374 const auto segmentation = this->GetTargetSegmentation();
375 if (nullptr == segmentation)
376 mitkThrow() << "Invalid state of SegWithPreviewTool. Cannot GetLabelMapping if no target segmentation is set.";
377
378 auto labels = segmentation->GetLabels();
379 auto maxLabelIter = std::max_element(std::begin(labels), std::end(labels), [](const Label::Pointer& a, const Label::Pointer& b) {
380 return a->GetValue() < b->GetValue();
381 });
382
383 if (maxLabelIter != labels.end())
384 {
385 offset = maxLabelIter->GetPointer()->GetValue();
386 }
387 }
388
389 LabelMappingType labelMapping = {};
390
391 switch (this->m_LabelTransferScope)
392 {
393 case LabelTransferScope::SelectedLabels:
394 {
395 for (auto label : this->m_SelectedLabels)
396 {
397 labelMapping.push_back({label, label + offset});
398 }
399 }
400 break;
401 case LabelTransferScope::AllLabels:
402 {
403 const auto labelValues = this->GetPreviewSegmentation()->GetLabelValuesByGroup(this->GetPreviewSegmentation()->GetActiveLayer());
404 for (auto labelValue : labelValues)
405 {
406 labelMapping.push_back({ labelValue, labelValue + offset});
407 }
408 }
409 break;
410 default:
411 {
412 if (m_SelectedLabels.empty())
413 mitkThrow() << "Failed to generate label transfer mapping. Tool is in an invalid state, as "
414 "LabelTransferScope==ActiveLabel but no label is indicated as selected label. Check "
415 "implementation of derived tool class.";
416 if (m_SelectedLabels.size() > 1)
417 mitkThrow() << "Failed to generate label transfer mapping. Tool is in an invalid state, as "
418 "LabelTransferScope==ActiveLabel but more then one selected label is indicated."
419 "Should be only one. Check implementation of derived tool class.";
420 labelMapping.push_back({m_SelectedLabels.front(), this->GetUserDefinedActiveLabel()});
421 }
422 break;
423 }

Calls 13

GetTargetSegmentationMethod · 0.95
beginFunction · 0.85
endFunction · 0.85
GetLabelsMethod · 0.80
GetPointerMethod · 0.80
GetLabelValuesByGroupMethod · 0.80
GetActiveLayerMethod · 0.80
frontMethod · 0.80
GetValueMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected