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