39 #ifndef PCL_REGISTRATION_DISTANCES_H
40 #define PCL_REGISTRATION_DISTANCES_H
58 std::vector<double> data (m);
59 memcpy (&data[0], fvec,
sizeof (
double) * m);
61 std::nth_element(data.begin(), data.begin() + (data.size () >> 1), data.end());
62 return (data[data.size () >> 1]);
71 huber (
const Eigen::Vector4f &p_src,
const Eigen::Vector4f &p_tgt,
double sigma)
73 Eigen::Array4f diff = (p_tgt.array () - p_src.array ()).abs ();
75 for (
int i = 0; i < 3; ++i)
78 norm += diff[i] * diff[i];
80 norm += 2.0 * sigma * diff[i] - sigma * sigma;
90 huber (
double diff,
double sigma)
96 norm += 2.0 * sigma * diff - sigma * sigma;
107 gedikli (
double val,
double clipping,
double slope = 4)
109 return (1.0 / (1.0 + pow (fabs(val) / clipping, slope)));
117 l1 (
const Eigen::Vector4f &p_src,
const Eigen::Vector4f &p_tgt)
119 return ((p_src.array () - p_tgt.array ()).abs ().sum ());
127 l2 (
const Eigen::Vector4f &p_src,
const Eigen::Vector4f &p_tgt)
129 return ((p_src - p_tgt).norm ());
137 l2Sqr (
const Eigen::Vector4f &p_src,
const Eigen::Vector4f &p_tgt)
139 return ((p_src - p_tgt).squaredNorm ());