From 3366436ef1cd8e102e07edd53ab7fc78b7259a9c Mon Sep 17 00:00:00 2001
From: Aurelien Bricier <aurelien.bricier@c-s.fr>
Date: Fri, 6 May 2011 14:36:26 +0200
Subject: [PATCH] DOC: added class documentation and cleaned code

---
 ...bVectorDataToDSValidatedVectorDataFilter.h | 49 ++++++++++++++-----
 ...ectorDataToDSValidatedVectorDataFilter.txx | 45 +++++++++--------
 2 files changed, 58 insertions(+), 36 deletions(-)

diff --git a/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.h b/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.h
index 6f86262bd3..75790ecb53 100644
--- a/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.h
+++ b/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.h
@@ -31,11 +31,37 @@
 
 namespace otb
 {
-/** \class VectorDataToVectorDataFilter
-  * \brief .
-  * 
+/** \class VectorDataToDSValidatedVectorDataFilter
+  * \brief VectorData filter validating data nodes using
+  * Dempster-Shafer theory.
   * 
+  * This filter takes as input a vector data containing
+  * features score and validate (or not) each data node
+  * according to these features score, a fuzzy model corresponding
+  * to each feature and a criterion according to the Dempster-Shafer
+  * theory. By default the filter is (for now) parametrized to process
+  * VectorDatas providing by the VectorDataToRoadDescriptionFilter.
+  * The hypothesis must be set using the SetHypothesis method.
+  * The convention is for each feature Fe, a mass of Belief is defined
+  * with two variables named Fe and Fe_. Thus, an hypothesis must declared:
+  * VectorDataToVectorDataFilter::LabelSetType hyp;
+  * hyp.insert("Fe(i)");
+  * hyp.insert("Fe(j)_");
+  * hyp.insert("Fe(k)_");
+  *
+  * Fe(i), Fe(j) and Fe(k) being descriptors.
+  *
+  * The criterion can be set through SetCriterionFormula() as a
+  * string refering to "Belief" and "Plausibility" from the
+  * Dempster-Shafer theory. By default the criterion is:
+  * "((Belief + Plausibility)/2) >= 0.5"
   * 
+  * The concidered features will be the intersection between
+  * the features embedded in this filter and the features embedded
+  * in the input vector data. For now, the filter uses "NDVI" and
+  * "RADIOM" features.
+  *
+  *
   * \ingroup VectorDataFilter
   * \sa VectorDataToRoadDescriptionFilter
   * \sa VectorDataToBuildingDescriptionFilter
@@ -87,14 +113,6 @@ public:
   itkGetConstMacro(CriterionFormula, std::string);
   itkSetMacro(CriterionFormula, std::string);
 
-  itkGetConstMacro(CriterionThreshold, double);
-  itkSetMacro(CriterionThreshold, double);
-  
-/*
-  itkGetConstMacro(Hypothesis, LabelSetType);
-  itkSetMacro(Hypothesis, LabelSetType);
-*/
-  
   LabelSetType GetHypothesis()
   {
     return m_Hypothesis;
@@ -116,6 +134,12 @@ protected:
   /**PrintSelf method */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
+  std::string GetNextID()
+    {
+      std::ostringstream oss;
+      oss << m_CurrentID++;
+      return oss.str();
+    }
 
 private:
   VectorDataToDSValidatedVectorDataFilter(const Self &); //purposely not implemented
@@ -130,8 +154,7 @@ private:
   typename ParserType::Pointer                    m_Parser;
 
   std::string                                     m_CriterionFormula;
-  double                                          m_CriterionThreshold;
-  
+  unsigned int                                    m_CurrentID;
 };
 
 } // end namespace otb
diff --git a/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.txx b/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.txx
index e0c19d52ab..ce88de0586 100644
--- a/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.txx
+++ b/Code/Fuzzy/otbVectorDataToDSValidatedVectorDataFilter.txx
@@ -29,20 +29,20 @@ namespace otb
 template <class TVectorData, class TPrecision>
   VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
 ::VectorDataToDSValidatedVectorDataFilter() : 
-  m_CriterionFormula("(Belief + Plausibility)/2"),
-  m_CriterionThreshold(0.5)
+  m_CriterionFormula("((Belief + Plausibility)/2) >= 0.5"),
+  m_CurrentID(0)
 {
   this->SetNumberOfRequiredInputs(1);
   //Default road descriptors
   std::vector<double> ndvi, radiom, lsd, shadow;
   ndvi.push_back(0.25); ndvi.push_back(0.5);ndvi.push_back(0.75); ndvi.push_back(0.99);
   radiom.push_back(0.25); radiom.push_back(0.5); radiom.push_back(0.75); radiom.push_back(0.90);
-  lsd.push_back(0.25); lsd.push_back(0.5); lsd.push_back(0.75); lsd.push_back(0.96);
-  shadow.push_back(0.25); shadow.push_back(0.5); shadow.push_back(0.75); shadow.push_back(0.98);
+  //lsd.push_back(0.25); lsd.push_back(0.5); lsd.push_back(0.75); lsd.push_back(0.96);
+  //shadow.push_back(0.25); shadow.push_back(0.5); shadow.push_back(0.75); shadow.push_back(0.98);
  
   AddDescriptor("NDVI", ndvi);
   AddDescriptor("RADIOM", radiom);
-  AddDescriptor("LSD", lsd);
+  //AddDescriptor("LSD", lsd);
   //AddDescriptor("SHADOW", shadow);
   
   m_Parser =  ParserType::New();
@@ -105,7 +105,7 @@ VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
     }
 
   //Initialize parser
-  std::cout << m_CriterionFormula << std::endl;
+  //std::cout << m_CriterionFormula << std::endl;
   m_Parser->SetExpr(m_CriterionFormula);
   m_Parser->DefineVar("Belief", &m_Bel);
   m_Parser->DefineVar("Plausibility", &m_Plau);
@@ -150,17 +150,15 @@ VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
           H.insert(fuzName);
           H_.insert(fuzName_);
           
-          mass->SetMass(H, m_FuzzyVars[i]->GetMembership(fuzName, 
-                                                         (double)(currentGeometry->GetFieldAsInt(fuzName))/100.0));
-          mass->SetMass(H_, m_FuzzyVars[i]->GetMembership(fuzName_,
-                                                          (double)(currentGeometry->GetFieldAsInt(fuzName))/100.0));
-
-
-          std::cout << fuzName  << " : " << (double)(currentGeometry->GetFieldAsInt(fuzName))/100.
-                    << " " << m_FuzzyVars[i]->GetMembership(fuzName, (double)(currentGeometry->GetFieldAsInt(fuzName))/100.0) << std::endl;
-          std::cout << fuzName_ << " : " << (double)(currentGeometry->GetFieldAsInt(fuzName))/100.
-                    << " " << m_FuzzyVars[i]->GetMembership(fuzName_, (double)(currentGeometry->GetFieldAsInt(fuzName))/100.0) << std::endl;
-          
+          mass->SetMass(H, m_FuzzyVars[i]->GetMembership(fuzName, currentGeometry->GetFieldAsDouble(fuzName)));
+          mass->SetMass(H_, m_FuzzyVars[i]->GetMembership(fuzName_, currentGeometry->GetFieldAsDouble(fuzName)));
+
+/*
+          std::cout << fuzName  << " : " << currentGeometry->GetFieldAsDouble(fuzName)
+                    << " " << m_FuzzyVars[i]->GetMembership(fuzName, currentGeometry->GetFieldAsInt(fuzName)) << std::endl;
+          std::cout << fuzName_ << " : " << currentGeometry->GetFieldAsDouble(fuzName)
+                    << " " << m_FuzzyVars[i]->GetMembership(fuzName_, currentGeometry->GetFieldAsDouble(fuzName)) << std::endl;
+*/
           mass->EstimateUncertainty();
           
           jointMassFilter->PushBackInput(mass);
@@ -169,20 +167,21 @@ VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
       jointMassFilter->Update();
       m_Bel  = jointMassFilter->GetOutput()->GetBelief(m_Hypothesis);
       m_Plau = jointMassFilter->GetOutput()->GetPlausibility(m_Hypothesis);
-      
+      /*
       std::cout << "Bel : " << m_Bel << std::endl;
       std::cout << "Plau: " << m_Plau << std::endl;
-
-      if (m_Parser->Eval() >= m_CriterionThreshold)
+      */
+      if (m_Parser->Eval())
         {
-        std::cout << "Feature Validated : " << m_Parser->Eval() << std::endl;
+        //std::cout << "Feature Validated : " << m_Parser->Eval() << std::endl;
+        currentGeometry->SetNodeId(this->GetNextID());
         this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder);
         }
       else 
         {
-        std::cout << "Feature Rejected : " << m_Parser->Eval() << std::endl;
+        //std::cout << "Feature Rejected : " << m_Parser->Eval() << std::endl;
         }
-      itVector.GoToEnd();//TEST ONLY###########################################
+      //itVector.GoToEnd();//TEST ONLY###########################################
       }
     ++itVector;
     }
-- 
GitLab