From 3487572643d4a568fe1a5eb74acce8f79a82b370 Mon Sep 17 00:00:00 2001
From: Cedric <cedric.traizet@c-s.fr>
Date: Thu, 10 Jan 2019 11:35:55 +0100
Subject: [PATCH] ENH: code factorization

---
 .../app/otbEndmemberNumberEstimation.cxx      | 28 ++++++++++++-------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
index 0ab2645baa..5413b925cd 100644
--- a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
@@ -122,30 +122,38 @@ private:
 
   void DoExecute() override
   {
-    otbAppLogINFO("Computing statistics on input image");
+    // Load input image
+    auto inputImage = GetParameterImage("in");
+
+    otbAppLogINFO("Computing statistics on input image ...");
     auto statisticsFilter = StreamingStatisticsVectorImageFilterType::New();
-    statisticsFilter->SetInput(GetParameterImage("in"));
+    statisticsFilter->SetInput(inputImage);
 
     statisticsFilter->Update();
+
+    auto correlationMatrix = statisticsFilter->GetCorrelation().GetVnlMatrix();
+    auto covarianceMatrix = statisticsFilter->GetCovariance().GetVnlMatrix();
+    auto numberOfPixels = inputImage->GetLargestPossibleRegion().GetNumberOfPixels();
+
     int numberOfEndmembers = 0;
     const std::string algorithm = GetParameterString("algo");
     if (algorithm=="elm")
       {
-      otbAppLogINFO("Estimation algorithm : Eigenvalue Likelihood Maximization");
+      otbAppLogINFO("Estimation algorithm : Eigenvalue Likelihood Maximization.");
       auto elm = EigenvalueLikelihoodMaximisationType::New();
-      elm->SetCovariance(statisticsFilter->GetCovariance().GetVnlMatrix());
-      elm->SetCorrelation(statisticsFilter->GetCorrelation().GetVnlMatrix());
-      elm->SetNumberOfPixels(GetParameterImage("in")->GetLargestPossibleRegion().GetNumberOfPixels());
+      elm->SetCovariance(covarianceMatrix);
+      elm->SetCorrelation(correlationMatrix);
+      elm->SetNumberOfPixels(numberOfPixels);
       elm->Compute();
       numberOfEndmembers = elm->GetNumberOfEndmembers();
       }
     else if (algorithm=="vd")
       {
-      otbAppLogINFO("Estimation algorithm : Virtual Dimensionality");
+      otbAppLogINFO("Estimation algorithm : Virtual Dimensionality.");
       auto vd = VirtualDimensionalityType::New();
-      vd->SetCovariance(statisticsFilter->GetCovariance().GetVnlMatrix());
-      vd->SetCorrelation(statisticsFilter->GetCorrelation().GetVnlMatrix());
-      vd->SetNumberOfPixels(GetParameterImage("in")->GetLargestPossibleRegion().GetNumberOfPixels());
+      vd->SetCovariance(covarianceMatrix);
+      vd->SetCorrelation(correlationMatrix);
+      vd->SetNumberOfPixels(numberOfPixels);
       vd->SetFAR(GetParameterFloat("algo.vd.far"));
       vd->Compute();
       numberOfEndmembers = vd->GetNumberOfEndmembers();
-- 
GitLab