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 @@ ...@@ -22,6 +22,8 @@
#include "otbWrapperApplicationFactory.h" #include "otbWrapperApplicationFactory.h"
#include "otbStreamingStatisticsVectorImageFilter.h" #include "otbStreamingStatisticsVectorImageFilter.h"
#include "otbEigenvalueLikelihoodMaximisation.h"
#include "otbVirtualDimensionality.h"
namespace otb namespace otb
{ {
...@@ -44,6 +46,8 @@ public: ...@@ -44,6 +46,8 @@ public:
typedef otb::StreamingStatisticsVectorImageFilter<FloatVectorImageType, float> typedef otb::StreamingStatisticsVectorImageFilter<FloatVectorImageType, float>
StreamingStatisticsVectorImageFilterType; StreamingStatisticsVectorImageFilterType;
typedef otb::VirtualDimensionality<float> VirtualDimensionalityType;
typedef otb::EigenvalueLikelihoodMaximisation<float> EigenvalueLikelihoodMaximisationType;
private: private:
void DoInit() override void DoInit() override
...@@ -70,7 +74,7 @@ private: ...@@ -70,7 +74,7 @@ private:
AddChoice("algo.vd", "vd"); AddChoice("algo.vd", "vd");
SetParameterDescription("algo.vd", "virtual dimensionality"); 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"); SetParameterDescription("number", "Estimated number of endmembers");
SetParameterRole("number", Role_Output); SetParameterRole("number", Role_Output);
...@@ -92,6 +96,27 @@ private: ...@@ -92,6 +96,27 @@ private:
statisticsFilter->SetInput(GetParameterImage("in")); statisticsFilter->SetInput(GetParameterImage("in"));
statisticsFilter->Update(); 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