42 template<
typename Precision>
46 inline Precision
reweight(Precision x) {
return 1/(sd_inlier+fabs(x));}
55 template<
typename Precision>
59 inline Precision
reweight(Precision d){
return 1/(sd_inlier+d*d);}
61 inline Precision
objective(Precision d){
return 0.5 *
::log(1 + d*d/sd_inlier);}
68 template<
typename Precision>
71 inline Precision
reweight(Precision){
return 1;}
73 inline Precision
objective(Precision d){
return d*d;}
81 template<
typename Precision>
86 Precision
reweight(Precision x)
const 104 template <
int Size,
typename Precision,
template <
typename RWPrecision>
class Reweight>
106 :
public Reweight<Precision>,
107 public WLS<Size,Precision>
112 my_true_C_inv(Zeros(size))
117 template<
int Size2,
typename Precision2,
typename Base2>
121 Precision scale = Reweight<Precision>::reweight(m);
122 Precision ts = Reweight<Precision>::true_scale(m);
123 my_residual += Reweight<Precision>::objective(m);
129 my_true_C_inv += scaledm.as_col() * scaledm.as_row();
133 void operator += (
const IRLS& meas){
135 my_true_C_inv += meas.my_true_C_inv;
142 Precision get_residual() {
return my_residual;}
147 my_true_C_inv = Zeros;
152 Precision my_residual;
158 int operator = (
IRLS& copyof );
Precision sd_inlier
The inlier standard deviation squared, .
Definition: irls.h:58
Precision objective(Precision d)
Returns .
Definition: irls.h:61
Precision true_scale(Precision x)
Returns .
Definition: irls.h:47
Matrix< R, C, P > log(const Matrix< R, C, P, B > &m)
computes the matrix logarithm of a matrix m using the inverse scaling and squaring method...
Definition: helpers.h:373
Pretty generic SFINAE introspection generator.
Definition: vec_test.cc:21
A vector.
Definition: vector.hh:126
void set_sd(Precision x)
Set the noise standard deviation.
Definition: irls.h:84
Robust reweighting (type I) for IRLS.
Definition: irls.h:43
Precision objective(Precision x)
Returns .
Definition: irls.h:48
void operator+=(const WLS &meas)
Combine measurements from two WLS systems.
Definition: wls.h:223
Precision reweight(Precision)
Returns .
Definition: irls.h:71
void set_sd(Precision)
Set the noise standard deviation (does nothing).
Definition: irls.h:70
Performs iterative reweighted least squares.
Definition: irls.h:105
Precision true_scale(Precision)
Returns .
Definition: irls.h:72
void clear()
Clear all the measurements and apply a constant regularisation term.
Definition: wls.h:60
void add_mJ(Precision m, const Vector< Size, P2, B2 > &J, Precision weight=1)
Add a single measurement.
Definition: wls.h:98
void set_sd(Precision x)
Set the noise standard deviation.
Definition: irls.h:44
A reweighting class representing no reweighting in IRLS.
Definition: irls.h:69
Precision true_scale(Precision d)
Returns .
Definition: irls.h:60
Robust reweighting (type II) for IRLS.
Definition: irls.h:56
Precision reweight(Precision d)
Returns .
Definition: irls.h:59
Definition: size_mismatch.hh:103
double sd_inlier
The inlier standard deviation, .
Definition: irls.h:45
Precision sd_inlier
Inlier standard deviation squared.
Definition: irls.h:85
A reweighting class where the objective function tends to a fixed value, rather than infinity...
Definition: irls.h:82
void set_sd(Precision x)
Set the noise standard deviation.
Definition: irls.h:57
Precision reweight(Precision x)
Returns .
Definition: irls.h:46
Precision objective(Precision d)
Returns .
Definition: irls.h:73
Performs Gauss-Newton weighted least squares computation.
Definition: wls.h:46