ViSP  2.8.0
vpRobust Class Reference

#include <vpRobust.h>

Public Types

enum  vpRobustEstimatorType { TUKEY, CAUCHY, HUBER }
 

Public Member Functions

 vpRobust (unsigned int n_data)
 
virtual ~vpRobust ()
 
void resize (unsigned int n_data)
 
void MEstimator (const vpRobustEstimatorType method, const vpColVector &residues, vpColVector &weights)
 
void MEstimator (const vpRobustEstimatorType method, const vpColVector &residues, const vpColVector &all_residues, vpColVector &weights)
 
vpColVector simultMEstimator (vpColVector &residues)
 
void setIteration (const unsigned int iter)
 
void setThreshold (const double noise_threshold)
 

Detailed Description

Contains an M-Estimator and various influence function.

Supported methods: M-estimation, Tukey, Cauchy and Huber

Definition at line 63 of file vpRobust.h.

Member Enumeration Documentation

Enumeration of influence functions.

Enumerator
TUKEY 
CAUCHY 
HUBER 

Definition at line 68 of file vpRobust.h.

Constructor & Destructor Documentation

vpRobust::vpRobust ( unsigned int  n_data)

Default Constructor.

Constructor.

Parameters
n_data: Size of the data vector.

Definition at line 72 of file vpRobust.cpp.

References vpColVector::resize(), and vpCDEBUG.

virtual vpRobust::~vpRobust ( )
inlinevirtual

Destructor.

Definition at line 102 of file vpRobust.h.

Member Function Documentation

void vpRobust::MEstimator ( const vpRobustEstimatorType  method,
const vpColVector residues,
vpColVector weights 
)

Compute the weights according a residue vector and a PsiFunction.

Calculate an Mestimate given a particular loss function using MAD (Median Absolute Deviation) as a scale estimate at each iteration.

Precondition
Requires a column vector of residues.
Postcondition
Keeps a copy of the weights so that rejected points are kept at zero weight.
Parameters
method: Type of M-Estimator $\rho(r_i)$:
  • TUKEY : $ \rho(r_i, C) = \left\{ \begin{array}{ll} \frac{r_i^6}{6} - \frac{C^2r_i^4}{2} +\frac{C^4r_i^2}{2} & \mbox{if} |r_i| < C \\ \frac{1}{6} C^6 & \mbox{else} \end{array} \right. $ with influence function $ \psi(r_i, C) = \left\{ \begin{array}{ll} r_i(r_i^2-C^2)^2 & \mbox{if} |r_i| < C \\ 0 & \mbox{else} \end{array} \right. $ where $C=4.7 \hat{\sigma} $ and with $ \hat{\sigma} = 1.48{Med}_i(|r_i - {Med}_j(r_j)|) $
  • CAUCHY :
  • HUBER :
Parameters
residues: Residues $ r_i $ used in the previous formula.
weights: Vector of weights $w_i = \frac{\psi(r_i)}{r_i}$. Values are in [0, 1]. A value near zero means that the data is an outlier. This vector must have the same size residue vector.
Returns
Returns a Column Vector of weights associated to each residue.

Definition at line 138 of file vpRobust.cpp.

References CAUCHY, vpMatrix::getRows(), HUBER, resize(), TUKEY, and vpCDEBUG.

Referenced by vpHomography::computeDisplacement(), vpHomography::computeRotation(), vpMbEdgeKltTracker::computeVVS(), vpMbKltTracker::computeVVS(), vpMbEdgeTracker::computeVVS(), vpMeLine::leastSquare(), and vpPose::poseVirtualVSrobust().

void vpRobust::MEstimator ( const vpRobustEstimatorType  method,
const vpColVector residues,
const vpColVector all_residues,
vpColVector weights 
)

Compute the weights according a residue vector and a PsiFunction.

Definition at line 210 of file vpRobust.cpp.

References CAUCHY, vpMatrix::getRows(), HUBER, TUKEY, and vpCDEBUG.

void vpRobust::resize ( unsigned int  n_data)

Resize containers for sort methods.

Resize containers.

Parameters
n_data: size of input data vector.

Definition at line 90 of file vpRobust.cpp.

References vpColVector::resize().

Referenced by vpMbEdgeKltTracker::computeVVS(), and MEstimator().

void vpRobust::setThreshold ( const double  noise_threshold)
inline
vpColVector vpRobust::simultMEstimator ( vpColVector residues)

Simult Mestimator.

Calculate an Mestimate with a simultaneous scale estimate using HUBER's influence function.

Precondition
Requires a column vector of residues
Postcondition
None
Returns
Returns a Column Vector of weights associated to each residue

Definition at line 349 of file vpRobust.cpp.

References vpMatrix::getRows(), and vpCDEBUG.