From 52e1b0c0bd89eea2a94ac931a39da1b0e5a71833 Mon Sep 17 00:00:00 2001 From: "raffaele.gaetano" <raffaele.gaetano@cirad.fr> Date: Sat, 18 Nov 2023 11:06:12 +0100 Subject: [PATCH] WIP: implemented mask option --- app/otbFillSegmentationHoles.cxx | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/app/otbFillSegmentationHoles.cxx b/app/otbFillSegmentationHoles.cxx index e660527..c9009d3 100644 --- a/app/otbFillSegmentationHoles.cxx +++ b/app/otbFillSegmentationHoles.cxx @@ -78,37 +78,50 @@ private: void DoExecute() override { + LabelImageType::Pointer maskIn; + LabelImageType::Pointer maskedIn; LabelImageType::Pointer labelIn = GetParameterUInt32Image("in"); + + m_MaskFilter = BandMathFilterType::New(); + if (HasValue("mask")) { + maskIn = GetParameterUInt32Image("mask"); + m_MaskFilter->SetNthInput(0, labelIn); + m_MaskFilter->SetNthInput(1, maskIn); + m_MaskFilter->SetExpression("b2!=0 ? b1 : 0"); + maskedIn = m_MaskFilter->GetOutput(); + } + else maskedIn = labelIn; m_StatsFilter = StatsFilterType::New(); - m_StatsFilter->SetInput(labelIn); + m_StatsFilter->SetInput(maskedIn); m_StatsFilter->Update(); long unsigned M = m_StatsFilter->GetMaximum(); std::cout << "Hole numbering starts at : " << 1 + M << std::endl; m_BandMathFilter = BandMathFilterType::New(); - m_BandMathFilter->SetNthInput(0, labelIn); + m_BandMathFilter->SetNthInput(0, maskedIn); if (HasValue("mask")) { - LabelImageType::Pointer maskIn = GetParameterUInt32Image("mask"); m_BandMathFilter->SetNthInput(1, maskIn); m_BandMathFilter->SetExpression("b1==0 && b2!=0"); - } - else { - m_BandMathFilter->SetExpression("b1==0"); - } + } else m_BandMathFilter->SetExpression("b1==0"); m_CCLFilter = CCLFIlterType::New(); m_CCLFilter->SetInput(m_BandMathFilter->GetOutput()); m_OutBandMathFilter = BandMathFilterType::New(); - m_OutBandMathFilter->SetNthInput(0, labelIn); + m_OutBandMathFilter->SetNthInput(0, maskedIn); m_OutBandMathFilter->SetNthInput(1, m_CCLFilter->GetOutput()); - std::string expr = "b1==0 ? " + std::to_string(M) + " + b2 : b1"; + std::string expr; + if (HasValue("mask")) { + m_OutBandMathFilter->SetNthInput(2, maskIn); + expr = "b1==0 && b3!=0 ? " + std::to_string(M) + " + b2 : b1"; + } else expr = "b1==0 ? " + std::to_string(M) + " + b2 : b1"; m_OutBandMathFilter->SetExpression(expr); SetParameterOutputImage("out", m_OutBandMathFilter->GetOutput()); } + BandMathFilterType::Pointer m_MaskFilter; CCLFIlterType::Pointer m_CCLFilter; BandMathFilterType::Pointer m_BandMathFilter; StatsFilterType::Pointer m_StatsFilter; -- GitLab