From 342ef1f1950abae89f560cb291a1db236437e5f4 Mon Sep 17 00:00:00 2001 From: Julien Michel <julien.michel@cnes.fr> Date: Tue, 10 Nov 2015 16:03:59 +0100 Subject: [PATCH] PERF: Remove calls to Update() and replace with calls to UpdateOutputInformation(), which will compute the stats without processing the full image result in memory --- .../app/otbDimensionalityReduction.cxx | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx index 5b5db74cbd..5da2dcea89 100644 --- a/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx +++ b/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx @@ -104,6 +104,7 @@ private: SetParameterDescription("in", "The input image to apply dimensionality reduction."); AddParameter(ParameterType_OutputImage, "out", "Output Image"); SetParameterDescription("out", "output image. Components are ordered by decreasing eigenvalues."); + MandatoryOff("out"); AddParameter(ParameterType_Group, "rescale", "Rescale Output."); MandatoryOff("rescale"); @@ -236,6 +237,7 @@ private: // PCA Algorithm case 0: { + otbAppLogDEBUG( << "PCA Algorithm "); PCAForwardFilterType::Pointer filter = PCAForwardFilterType::New(); m_ForwardFilter = filter; @@ -245,18 +247,20 @@ private: filter->SetInput(GetParameterFloatVectorImage("in")); filter->SetNumberOfPrincipalComponentsRequired(nbComp); - filter->SetUseNormalization(normalize); - m_ForwardFilter->Update(); - + filter->SetUseNormalization(normalize); + m_ForwardFilter->GetOutput()->UpdateOutputInformation(); + if (invTransform) - { + { invFilter->SetInput(m_ForwardFilter->GetOutput()); if (normalize) { - otbAppLogINFO( << "Normalization MeanValue :"<<filter->GetMeanValues()<< - "StdValue :" <<filter->GetStdDevValues() ); + otbAppLogINFO( << "Normalization MeanValue:"<<filter->GetMeanValues() ); invFilter->SetMeanValues(filter->GetMeanValues()); - invFilter->SetStdDevValues(filter->GetStdDevValues()); + // By default normalization by std dev is deactivated in + //forward filter, and GetStdDevValues() returns an empty + //vector, which confuses the invFilter. + //invFilter->SetStdDevValues(filter->GetStdDevValues()); } invFilter->SetTransformationMatrix(filter->GetTransformationMatrix()); @@ -289,9 +293,10 @@ private: filter->SetNumberOfPrincipalComponentsRequired(nbComp); filter->SetUseNormalization(normalize); filter->GetNoiseImageFilter()->SetRadius(radius); - m_ForwardFilter->Update(); + if (invTransform) { + m_ForwardFilter->Update(); otbAppLogDEBUG( << "Compute Inverse Transform"); invFilter->SetInput(m_ForwardFilter->GetOutput()); invFilter->SetMeanValues(filter->GetMeanValues()); @@ -314,8 +319,6 @@ private: MAFForwardFilterType::Pointer filter = MAFForwardFilterType::New(); m_ForwardFilter = filter; filter->SetInput(GetParameterFloatVectorImage("in")); - m_ForwardFilter->Update(); - otbAppLogINFO( << "V :"<<std::endl<<filter->GetV()<<"Auto-Correlation :"<<std::endl <<filter->GetAutoCorrelation() ); break; @@ -336,10 +339,10 @@ private: filter->SetNumberOfPrincipalComponentsRequired(nbComp); filter->SetNumberOfIterations(nbIterations); filter->SetMu(mu); - m_ForwardFilter->Update(); if (invTransform) { + m_ForwardFilter->Update(); otbAppLogDEBUG( << "Compute Inverse Transform"); invFilter->SetInput(m_ForwardFilter->GetOutput()); -- GitLab