18 #ifndef __otbStandardDSCostFunction_txx
19 #define __otbStandardDSCostFunction_txx
26 template <
class TDSVal
idationFilter>
29 m_CriterionFormula(
"((Belief + Plausibility)/2.)"),
32 m_GTVectorData = VectorDataType::New();
33 m_NSVectorData = VectorDataType::New();
34 m_Parser = ParserType::New();
37 template <
class TDSVal
idationFilter>
42 return m_DescriptorList.size()*4;
45 template <
class TDSVal
idationFilter>
51 if (parameters.size() != m_DescriptorList.size()*4)
53 itkExceptionMacro(<<
"Wrong model!" )
57 m_Parser->SetExpr(m_CriterionFormula);
60 for (
unsigned int i = 0; i < m_DescriptorList.size(); ++i)
62 std::vector<double> tmp;
63 for (
unsigned int j = 0; j < 4; ++j)
65 tmp.push_back(parameters[4*i+j]);
67 PairType pair( m_DescriptorList[i], tmp);
68 descModel.push_back(pair);
71 typename DSValidationFilterType::Pointer internalFunctionGT = DSValidationFilterType::New();
72 internalFunctionGT->SetCriterionFormula(
"1");
73 internalFunctionGT->SetInput(m_GTVectorData);
74 internalFunctionGT->SetBeliefHypothesis(m_BeliefHypothesis);
75 internalFunctionGT->SetPlausibilityHypothesis(m_PlausibilityHypothesis);
78 internalFunctionGT->SetDescriptorModels(descModel);
84 internalFunctionGT->Update();
86 typename DSValidationFilterType::Pointer internalFunctionNS = DSValidationFilterType::New();
87 internalFunctionNS->SetCriterionFormula(
"1");
88 internalFunctionNS->SetInput(m_NSVectorData);
89 internalFunctionNS->SetBeliefHypothesis(m_BeliefHypothesis);
90 internalFunctionNS->SetBeliefHypothesis(m_PlausibilityHypothesis);
93 internalFunctionNS->SetDescriptorModels(descModel);
99 internalFunctionNS->Update();
106 TreeIteratorType itVectorGT(internalFunctionGT->GetOutput()->GetDataTree());
107 itVectorGT.GoToBegin();
108 while (!itVectorGT.IsAtEnd())
110 if (!itVectorGT.Get()->IsRoot() && !itVectorGT.Get()->IsDocument() && !itVectorGT.Get()->IsFolder())
112 double belief = itVectorGT.Get()->GetFieldAsDouble(
"Belief");
113 double plausibility = itVectorGT.Get()->GetFieldAsDouble(
"Plausi");
115 m_Parser->DefineVar(
"Belief", &belief);
116 m_Parser->DefineVar(
"Plausibility", &plausibility);
118 accGT += ((1 - m_Parser->Eval()) * (1 - m_Parser->Eval()));
121 m_Parser->ClearVar();
126 TreeIteratorType itVectorNS(internalFunctionNS->GetOutput()->GetDataTree());
127 itVectorNS.GoToBegin();
128 while (!itVectorNS.IsAtEnd())
130 if (!itVectorNS.Get()->IsRoot() && !itVectorNS.Get()->IsDocument() && !itVectorNS.Get()->IsFolder())
132 double belief = itVectorNS.Get()->GetFieldAsDouble(
"Belief");
133 double plausibility = itVectorNS.Get()->GetFieldAsDouble(
"Plausi");
135 m_Parser->DefineVar(
"Belief", &belief);
136 m_Parser->DefineVar(
"Plausibility", &plausibility);
138 accNS += (m_Parser->Eval() * m_Parser->Eval());
141 m_Parser->ClearVar();
145 return (m_Weight * accGT / nGT + (1 - m_Weight) * accNS / nNS);
148 template <
class TDSVal
idationFilter>
154 itkExceptionMacro(<<
"Not Supposed to be used when using Amoeba Optimizer!")
158 template <
class TDSVal
idationFilter>
163 Superclass::PrintSelf(os, indent);