Skip to content
Snippets Groups Projects
Commit c7f6a840 authored by Aurélien Bricier's avatar Aurélien Bricier
Browse files

ENH: adapted to new specs

parent d7109ecf
Branches
Tags
No related merge requests found
......@@ -94,7 +94,6 @@ public:
TreeIteratorType;
typedef TPrecision PrecisionType;
typedef FuzzyVariable<std::string, PrecisionType> FuzzyVarType;
typedef MassOfBelief<std::string, PrecisionType>
MassOfBeliefFunctionType;
typedef typename MassOfBeliefFunctionType::LabelSetType
......@@ -106,25 +105,22 @@ public:
typedef itk::DataObject::Pointer DataObjectPointer;
typedef itk::DataObject DataObject;
typedef std::pair< std::string, std::vector<double> > PairType;
typedef std::vector< PairType > DescriptorModelsType;
typedef FuzzyVariable<std::string, PrecisionType> FuzzyVarType;
typedef FuzzyDescriptorsModelManager::PairType PairType;
typedef FuzzyDescriptorsModelManager::DescriptorsModelType DescriptorModelsType;
/** Descriptor model accessors. */
virtual void AddDescriptor(const std::string& key, std::vector<double> model);
virtual void ClearDescriptors();
void SetDescriptorModels( DescriptorModelsType model )
{
m_DescriptorModels = model;
this->Modified();
}
void SetDescriptorModels( DescriptorModelsType model );
DescriptorModelsType GetDescriptorModels()
{
return m_DescriptorModels;
}
/** Parameter accessors. */
itkGetConstMacro(CriterionFormula, std::string);
itkSetMacro(CriterionFormula, std::string);
......@@ -132,47 +128,6 @@ public:
itkGetMacro(CriterionThreshold, double);
itkSetMacro(CriterionThreshold, double);
/** Fuzzy Models */
void SetFuzzyModel(const std::string& key, std::vector<double> model)
{
unsigned int nbDescriptor = m_DescriptorModels.size();
if (model.size() != 4)
{
itkExceptionMacro(<< "Wrong model! Size(="
<< model.size()
<< ") > 4" )
}
else if (model[0]<0 || model[1]<model[0] || model[2]<model[1] || model[2]>1)
{
itkExceptionMacro(<< "Wrong model! Values have to be 0<=v1<=v2<=v3<=1" )
}
else if (model[3]<.75 || model[3]>1.0)
{
itkExceptionMacro(<< "Wrong model! Values have to be 0.75<=v4<=1" )
}
else
{
for (unsigned j=0; j<nbDescriptor; j++)
{
if (m_DescriptorModels[j].first.compare(key) == 0)
{
for (unsigned int i=0; i<4; i++)
{
if ((model[i]<=1.) && (model[i]>=0.))
{
m_DescriptorModels[j].second.at(i) = model[i];
}
else
{
itkExceptionMacro(<< "Wrong model! Value must be between 0 and 1")
}
}
}
}
}
}
LabelSetType GetBeliefHypothesis()
{
return m_BeliefHypothesis;
......
......@@ -34,24 +34,8 @@ template <class TVectorData, class TPrecision>
m_CurrentID(0)
{
this->SetNumberOfRequiredInputs(1);
//Default road descriptors
std::vector<double> noNDVI, roadSA, noBuilding;
noNDVI.push_back(0.25); noNDVI.push_back(0.5); noNDVI.push_back(0.75); noNDVI.push_back(0.99);
roadSA.push_back(0.25); roadSA.push_back(0.5); roadSA.push_back(0.75); roadSA.push_back(0.90);
noBuilding.push_back(0.25); noBuilding.push_back(0.5); noBuilding.push_back(0.75); noBuilding.push_back(0.90);
AddDescriptor("NONDVI", noNDVI);
AddDescriptor("ROADSA", roadSA);
AddDescriptor("NOBUIL", noBuilding);
m_Parser = ParserType::New();
m_BeliefHypothesis.insert("ROADSA");
m_PlausibilityHypothesis.insert("ROADSA");
m_PlausibilityHypothesis.insert("NOBUIL");
m_PlausibilityHypothesis.insert("NONDVI");
}
......@@ -60,7 +44,39 @@ void
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::AddDescriptor(const std::string& key, std::vector<double> model)
{
m_DescriptorModels.push_back(std::pair<std::string, std::vector<double> >(key, model));
bool alreadyExist = false;
if (model.size() != 4)
{
itkExceptionMacro(<< "Wrong model! Size(=" << model.size() << ") > 4" )
}
else if (model[0]<0 || model[1]<model[0] || model[2]<model[1] || model[2]>1)
{
itkExceptionMacro(<< "Wrong model! Values have to be 0<=v1<=v2<=v3<=1" )
}
else if (model[3]<.75 || model[3]>1.0)
{
itkExceptionMacro(<< "Wrong model! Values have to be 0.75<=v4<=1" )
}
else
{
for (unsigned int i=0; i<m_DescriptorModels.size(); i++)
{
if (m_DescriptorModels[i].first.compare(key) == 0)
{
for (unsigned int j=0; j<4; j++)
{
m_DescriptorModels[i].second.at(j) = model[j];
}
alreadyExist = true;
}
}
if (!alreadyExist)
{
m_DescriptorModels.push_back(std::pair<std::string, std::vector<double> >(key, model));
}
}
this->Modified();
}
......@@ -73,6 +89,18 @@ VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
m_DescriptorModels.clear();
}
template <class TVectorData, class TPrecision>
void
VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
::SetDescriptorModels(DescriptorModelsType model)
{
for (unsigned int i=0; i<model.size(); i++)
{
this->AddDescriptor(model[i].first, model[i].second);
}
}
template <class TVectorData, class TPrecision>
void
......
......@@ -71,17 +71,25 @@ int otbVectorDataToDSValidatedVectorDataFilter(int argc, char* argv[])
filter->SetInput(vdReader->GetOutput());
//filter->GetDescriptorModels();
FuzzyManagerType::Print(filter->GetDescriptorModels());
LabelSetType hypothesis;
hypothesis.insert("NONDVI");
hypothesis.insert("ROADSA");
hypothesis.insert("NOBUIL");
filter->SetPlausibilityHypothesis(hypothesis);
std::vector<double> fuzzyModel;
fuzzyModel.push_back(0.15);
fuzzyModel.push_back(0.25);
fuzzyModel.push_back(0.35);
fuzzyModel.push_back(0.8);
filter->SetFuzzyModel("TEST", fuzzyModel);
LabelSetType plau, bel;
plau.insert("NONDVI");
plau.insert("ROADSA");
plau.insert("NOBUIL");
filter->SetPlausibilityHypothesis(plau);
bel.insert("ROADSA");
bel.insert("NONDVI");
bel.insert("NOBUIL");
filter->SetBeliefHypothesis(bel);
std::vector<double> stdModel;
stdModel.push_back(0.25);
stdModel.push_back(0.50);
stdModel.push_back(0.75);
stdModel.push_back(0.90);
filter->AddDescriptor("NONDVI", stdModel);
filter->AddDescriptor("ROADSA", stdModel);
filter->AddDescriptor("NOBUIL", stdModel);
FuzzyManagerType::Print(filter->GetDescriptorModels());
vdWriter->SetFileName(outputVD);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment