41 template <
typename FloatVectorT>
inline float
73 PCL_ERROR (
"[pcl::selectNorm] For PF and K norms you have to explicitly call the method, as they need additional parameters\n");
79 template <
typename FloatVectorT>
inline float
80 L1_Norm (FloatVectorT a, FloatVectorT b,
int dim)
83 for (
int i = 0; i < dim; ++i)
84 norm += fabsf(a[i] - b[i]);
89 template <
typename FloatVectorT>
inline float
93 for (
int i = 0; i < dim; ++i)
95 float diff = a[i] - b[i];
102 template <
typename FloatVectorT>
inline float
103 L2_Norm (FloatVectorT a, FloatVectorT b,
int dim)
109 template <
typename FloatVectorT>
inline float
113 for (
int i = 0; i < dim; ++i)
114 norm = (std::max)(fabsf(a[i] - b[i]), norm);
119 template <
typename FloatVectorT>
inline float
120 JM_Norm (FloatVectorT a, FloatVectorT b,
int dim)
124 for (
int i = 0; i < dim; ++i)
125 norm += (sqrtf (a[i]) - sqrtf (b[i])) * (sqrtf (a[i]) - sqrtf (b[i]));
131 template <
typename FloatVectorT>
inline float
132 B_Norm (FloatVectorT a, FloatVectorT b,
int dim)
134 float norm = 0.0, result;
136 for (
int i = 0; i < dim; ++i)
137 norm += sqrtf (a[i] * b[i]);
140 result = -logf (norm);
148 template <
typename FloatVectorT>
inline float
153 for (
int i = 0; i < dim; ++i)
154 norm += sqrtf (fabsf (a[i] - b[i]));
160 template <
typename FloatVectorT>
inline float
161 CS_Norm (FloatVectorT a, FloatVectorT b,
int dim)
165 for (
int i = 0; i < dim; ++i)
166 if ((a[i] + b[i]) != 0)
167 norm += (a[i] - b[i]) * (a[i] - b[i]) / (a[i] + b[i]);
174 template <
typename FloatVectorT>
inline float
179 for (
int i = 0; i < dim; ++i)
180 if ((a[i] / b[i]) > 0)
181 norm += (a[i] - b[i]) * logf (a[i] / b[i]);
188 template <
typename FloatVectorT>
inline float
189 PF_Norm (FloatVectorT a, FloatVectorT b,
int dim,
float P1,
float P2)
193 for (
int i = 0; i < dim; ++i)
194 norm += (P1 * a[i] - P2 * b[i]) * (P1 * a[i] - P2 * b[i]);
199 template <
typename FloatVectorT>
inline float
200 K_Norm (FloatVectorT a, FloatVectorT b,
int dim,
float P1,
float P2)
204 for (
int i = 0; i < dim; ++i)
205 norm += fabsf (P1 * a[i] - P2 * b[i]);
210 template <
typename FloatVectorT>
inline float
211 KL_Norm (FloatVectorT a, FloatVectorT b,
int dim)
215 for (
int i = 0; i < dim; ++i)
216 if ( (b[i] != 0) && ((a[i] / b[i]) > 0) )
217 norm += a[i] * logf (a[i] / b[i]);
224 template <
typename FloatVectorT>
inline float
228 for (
int i = 0; i < dim; ++i)
229 norm += (std::min)(a[i], b[i]);