diff --git a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx index 0ab2645baa175018911b7a84a59e49c2ae3ab035..5413b925cd5b3b0931f0eeecaedae1dc83a1ae4e 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();