From b3c8747f3a59f1b602c0d12ae2131ccd654be7b0 Mon Sep 17 00:00:00 2001 From: Julien Michel <julien.michel@cnes.fr> Date: Tue, 10 Nov 2015 15:56:20 +0100 Subject: [PATCH] PERF: Move CovarianceEstimator updates out of BeforeThreadedGenerateData --- .../include/otbNormalizeVectorImageFilter.h | 1 + .../include/otbNormalizeVectorImageFilter.txx | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h b/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h index 9a2923f7e2..56ec38934f 100644 --- a/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h +++ b/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h @@ -195,6 +195,7 @@ protected: NormalizeVectorImageFilter (); virtual ~NormalizeVectorImageFilter() { } + void GenerateOutputInformation(); void BeforeThreadedGenerateData(); private: diff --git a/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.txx b/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.txx index ba395638cd..c91a9df6bf 100644 --- a/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.txx +++ b/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.txx @@ -35,6 +35,22 @@ NormalizeVectorImageFilter< TInputImage, TOutputImage > m_CovarianceEstimator = CovarianceEstimatorFilterType::New(); } + +template < class TInputImage, class TOutputImage > +void +NormalizeVectorImageFilter< TInputImage, TOutputImage > +::GenerateOutputInformation() +{ + // Call superclass implementation + Superclass::GenerateOutputInformation(); + + if( (m_UseMean && !m_IsGivenMean) || (m_UseStdDev && !m_IsGivenStdDev)) + { + m_CovarianceEstimator->SetInput( const_cast<InputImageType*>( this->GetInput() ) ); + m_CovarianceEstimator->Update(); + } +} + template < class TInputImage, class TOutputImage > void NormalizeVectorImageFilter< TInputImage, TOutputImage > @@ -56,9 +72,6 @@ NormalizeVectorImageFilter< TInputImage, TOutputImage > if ( !m_IsGivenMean ) { - m_CovarianceEstimator->SetInput( const_cast<InputImageType*>( this->GetInput() ) ); - m_CovarianceEstimator->Update(); - this->GetFunctor().SetMean( m_CovarianceEstimator->GetMean() ); if ( !m_IsGivenStdDev && m_UseStdDev ) -- GitLab