23 #ifndef otbEuclideanDistanceMetricWithMissingValuePow2_hxx
24 #define otbEuclideanDistanceMetricWithMissingValuePow2_hxx
27 #include "itkMeasurementVectorTraits.h"
28 #include "vcl_legacy_aliases.h"
36 template <
class TVector>
39 if (itk::NumericTraits<TVector>::GetLength(x1) != itk::NumericTraits<TVector>::GetLength(x2))
41 itkExceptionMacro(<<
"Vector lengths must be equal.");
44 double temp, distance = itk::NumericTraits<double>::Zero;
46 for (
unsigned int i = 0; i < x1.Size(); ++i)
48 if (!IsMissingValue(x1[i]) && !IsMissingValue(x2[i]))
51 distance += temp * temp;
58 template <
class TVector>
62 if (measurementVectorSize == 0)
64 itkExceptionMacro(<<
"Please set the MeasurementVectorSize first");
66 itk::Statistics::MeasurementVectorTraits::Assert(this->GetOrigin(), measurementVectorSize,
67 "EuclideanDistanceMetric::Evaluate Origin and input vector have different lengths");
69 double temp, distance = itk::NumericTraits<double>::Zero;
71 for (
unsigned int i = 0; i < measurementVectorSize; ++i)
73 if (!IsMissingValue(this->GetOrigin()[i]) && !IsMissingValue(x[i]))
75 temp = this->GetOrigin()[i] - x[i];
76 distance += temp * temp;
83 template <
class TVector>
87 if (IsMissingValue(a) || IsMissingValue(b))
94 template <
class TVector>
98 return static_cast<bool>(vnl_math_isnan(
static_cast<double>(v)));
101 template <
class TVector>
105 v = std::numeric_limits<ValueType>::signaling_NaN();
static bool IsMissingValue(const ValueType &v)
double Evaluate(const TVector &x) const override
Superclass::MeasurementVectorSizeType MeasurementVectorSizeType
TVector::ValueType ValueType
static void SetToMissingValue(ValueType &v)
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.