Commit b9524112 authored by Cedric's avatar Cedric
Browse files

ENH: added the endmember number estimation to the application

No related merge requests found
Showing with 26 additions and 1 deletion
+26 -1
......@@ -22,6 +22,8 @@
#include "otbWrapperApplicationFactory.h"
#include "otbStreamingStatisticsVectorImageFilter.h"
#include "otbEigenvalueLikelihoodMaximisation.h"
#include "otbVirtualDimensionality.h"
namespace otb
{
......@@ -44,6 +46,8 @@ public:
typedef otb::StreamingStatisticsVectorImageFilter<FloatVectorImageType, float>
StreamingStatisticsVectorImageFilterType;
typedef otb::VirtualDimensionality<float> VirtualDimensionalityType;
typedef otb::EigenvalueLikelihoodMaximisation<float> EigenvalueLikelihoodMaximisationType;
private:
void DoInit() override
......@@ -70,7 +74,7 @@ private:
AddChoice("algo.vd", "vd");
SetParameterDescription("algo.vd", "virtual dimensionality");
AddParameter(ParameterType_String,"number","Number of endmembers");
AddParameter(ParameterType_Int,"number","Number of endmembers");
SetParameterDescription("number", "Estimated number of endmembers");
SetParameterRole("number", Role_Output);
......@@ -92,6 +96,27 @@ private:
statisticsFilter->SetInput(GetParameterImage("in"));
statisticsFilter->Update();
int numberOfEndmembers = 0;
const std::string algorithm = GetParameterString("algo");
if (algorithm=="elm")
{
auto elm = EigenvalueLikelihoodMaximisationType::New();
elm->SetCovariance(statisticsFilter->GetCovariance().GetVnlMatrix());
elm->SetCorrelation(statisticsFilter->GetCorrelation().GetVnlMatrix());
elm->SetNumberOfPixels(GetParameterImage("in")->GetLargestPossibleRegion().GetNumberOfPixels());
elm->Compute();
numberOfEndmembers = elm->GetNumberOfEndmembers();
}
else if (algorithm=="vd")
{
auto vd = VirtualDimensionalityType::New();
vd->SetCovariance(statisticsFilter->GetCovariance().GetVnlMatrix());
vd->SetCorrelation(statisticsFilter->GetCorrelation().GetVnlMatrix());
vd->SetNumberOfPixels(GetParameterImage("in")->GetLargestPossibleRegion().GetNumberOfPixels());
vd->Compute();
numberOfEndmembers = vd->GetNumberOfEndmembers();
}
SetParameterInt("number", numberOfEndmembers);
}
};
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment