From 9aa63c558320d78c42a1c84f6787bf5830a822a0 Mon Sep 17 00:00:00 2001 From: ctraizet <cedric.traizet@c-s.fr> Date: Mon, 18 Mar 2019 16:33:17 +0100 Subject: [PATCH] REFAC: replace EncoderFunctor by a functorImageFilter --- .../app/otbZonalStatistics.cxx | 37 +++++++++++++------ .../AppClassification/otb-module.cmake | 1 + 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx b/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx index c11f380fc7..452ddfd344 100644 --- a/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx +++ b/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx @@ -39,7 +39,7 @@ #include "otbLabelImageToVectorDataFilter.h" #include "itkBinaryThresholdImageFilter.h" -#include "otbUnaryFunctorImageFilter.h" +#include "otbFunctorImageFilter.h" namespace otb { @@ -79,6 +79,7 @@ public: typedef itk::BinaryThresholdImageFilter<LabelImageType, LabelImageType> ThresholdFilterType; + template<class TInput, class TOutput> struct EncoderFunctorType { StatsFilterType::LabelPopulationMapType* m_CountMap; @@ -92,14 +93,19 @@ public: static constexpr size_t m_NbStatsPerBand{4}; static constexpr size_t m_NbGlobalStats{1}; - size_t GetOutputSize() + size_t OutputSize(const std::array<size_t,1> & itkNotUsed(nbBands)) const { return m_NbInputComponents*m_NbStatsPerBand+m_NbGlobalStats; } - FloatVectorImageType::PixelType operator()(LabelValueType const &pix) + size_t OutputSize() const { - FloatVectorImageType::PixelType outPix(GetOutputSize()); + return m_NbInputComponents*m_NbStatsPerBand+m_NbGlobalStats; + } + + TOutput operator()(TInput const &pix) + { + TOutput outPix(OutputSize()); outPix.Fill(m_OutBvValue); if(pix != m_InNoData) { @@ -129,9 +135,11 @@ public: else return false; } }; - typedef otb::UnaryFunctorImageFilter<LabelImageType, - FloatVectorImageType, - EncoderFunctorType> EncoderFilterType; + typedef otb::FunctorImageFilter<EncoderFunctorType< + LabelValueType, + FloatVectorImageType::PixelType + >> EncoderFilterType; + /** Standard macro */ itkNewMacro(Self); itkTypeMacro(ZonalStatistics, Application); @@ -406,12 +414,17 @@ public: m_EncoderFilter->SetInput(m_RasterizeFilter->GetOutput()); } - m_EncoderFilter->SetFunctor(EncoderFunctorType{&m_CountMap, &m_MeanMap, &m_StdMap, - &m_MinMap, &m_MaxMap, - m_InputImage->GetNumberOfComponentsPerPixel(), - m_IntNoData, m_OutBvValue }); + m_EncoderFilter->GetModifiableFunctor().m_CountMap = &m_CountMap; + m_EncoderFilter->GetModifiableFunctor().m_MeanMap = &m_MeanMap; + m_EncoderFilter->GetModifiableFunctor().m_StdMap = &m_StdMap; + m_EncoderFilter->GetModifiableFunctor().m_MinMap = &m_MinMap; + m_EncoderFilter->GetModifiableFunctor().m_MaxMap = &m_MaxMap; + m_EncoderFilter->GetModifiableFunctor().m_NbInputComponents = m_InputImage->GetNumberOfComponentsPerPixel(); + m_EncoderFilter->GetModifiableFunctor().m_InNoData = m_IntNoData; + m_EncoderFilter->GetModifiableFunctor().m_OutBvValue = m_OutBvValue; + otbAppLogINFO("Output raster image will have " << - (m_EncoderFilter->GetFunctor()).GetOutputSize() << " bands\n"); + (m_EncoderFilter->GetFunctor()).OutputSize() << " bands\n"); AddProcess(m_EncoderFilter, "Encode output raster image"); SetParameterOutputImage("out.raster.filename", m_EncoderFilter->GetOutput()); } diff --git a/Modules/Applications/AppClassification/otb-module.cmake b/Modules/Applications/AppClassification/otb-module.cmake index 8a9c0c6c02..a35bd17816 100644 --- a/Modules/Applications/AppClassification/otb-module.cmake +++ b/Modules/Applications/AppClassification/otb-module.cmake @@ -49,6 +49,7 @@ otb_module(OTBAppClassification OTBObjectList OTBCommon OTBSampling + OTBFunctor TEST_DEPENDS OTBTestKernel -- GitLab