Merge branch 'master' into dev_train_binocular_ui
[The-Artvertiser.git] / starter / math / robust_estimators.h
blobaf42004bfc04fc4a1668d59172f0697cab00e86d
1 /*
2 Copyright 2005, 2006 Computer Vision Lab,
3 Ecole Polytechnique Federale de Lausanne (EPFL), Switzerland.
4 All rights reserved.
6 This file is part of BazAR.
8 BazAR is free software; you can redistribute it and/or modify it under the
9 terms of the GNU General Public License as published by the Free Software
10 Foundation; either version 2 of the License, or (at your option) any later
11 version.
13 BazAR is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15 PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License along with
18 BazAR; if not, write to the Free Software Foundation, Inc., 51 Franklin
19 Street, Fifth Floor, Boston, MA 02110-1301, USA
21 #ifndef ROBUST_ESTIMATORS_H
22 #define ROBUST_ESTIMATORS_H
24 #include <math.h>
26 //! \ingroup starter
27 //@{
29 double rho_tukey_without_sqrt(const double x2, const double c);
30 double rho_tukey_without_sqrt_derivative(const double x2, const double c);
32 double rho_huber_without_sqrt(const double x2, const double c);
33 double rho_huber_without_sqrt_derivative(const double x2, const double c);
36 inline double rho_tukey_without_sqrt(const double x2, const double c)
38 double c2 = c * c;
40 if (x2 > c2)
41 return c2 / 6;
42 else
44 double t = 1. - x2 / c2;
46 return c2 / 6 * (1. - t * t * t);
50 inline double rho_tukey_without_sqrt_derivative(const double x2, const double c)
52 double c2 = c * c;
54 if (x2 > c2)
55 return 0;
56 else
58 double t = 1. - x2 / c2;
60 return t * t / 2.;
64 inline double rho_huber_without_sqrt(const double x2, const double c)
66 double c2 = c * c;
68 if (x2 < c2)
69 return x2;
70 else
71 return 2 * c * sqrt(x2) - c2;
74 inline double rho_huber_without_sqrt_derivative(const double x2, const double c)
76 double c2 = c * c;
78 if (x2 < c2)
79 return 1;
80 else
81 return c / sqrt(x2);
84 //@}
85 #endif // ROBUST_ESTIMATORS_H