Public Types | Public Member Functions | Protected Member Functions | Private Attributes
rrel_estimation_problem Class Reference

Base class for (robust) estimation problems. More...

#include <rrel_estimation_problem.h>

Inheritance diagram for rrel_estimation_problem:
Inheritance graph
[legend]

List of all members.

Public Types

enum  scale_t { NONE = 0, SINGLE = 1, MULTIPLE = 2 }
 Type of scale information this problem provides. More...

Public Member Functions

 rrel_estimation_problem (unsigned int param_dof, unsigned int num_samples_for_fit)
 Constructor.
 rrel_estimation_problem ()
 Constructor.
virtual ~rrel_estimation_problem ()
 Destructor.
unsigned int param_dof () const
 The degrees of freedom in the parameter set.
unsigned int num_samples_to_instantiate () const
 Minimum number of samples required to uniquely instantiate a fit.
virtual unsigned int num_samples () const =0
 The number of samples.
virtual unsigned int residual_dof () const
 The degrees of freedom in the residual.
virtual unsigned int num_unique_samples () const
 The number of "unique" samples.
virtual bool fit_from_minimal_set (const vcl_vector< int > &, vnl_vector< double > &) const =0
 Generate a parameter vector from a minimal sample set.
virtual void compute_residuals (const vnl_vector< double > &params, vcl_vector< double > &residuals) const =0
 Compute the residuals relative to the given parameter vector.
virtual void compute_weights (const vcl_vector< double > &residuals, const rrel_wls_obj *obj, double scale, vcl_vector< double > &weights) const
 Compute the weights for the given residuals.
virtual scale_t scale_type () const
 Type of scale information the problem provides.
virtual const vcl_vector
< double > & 
prior_multiple_scales () const
 The prior scale vector, if available.
virtual double prior_scale () const
 The prior scale, if available.
virtual void set_prior_multiple_scales (const vcl_vector< double > &scales)
 Sets the scales for heteroscedastic data.
virtual void set_prior_scale (double scale)
 Sets the scale for homoscedastic data.
virtual void set_no_prior_scale ()
 Removes the scale information for the problem.
void set_similarity_weights (const vcl_vector< double > &wgts)
 Set similarity weights.
const vcl_vector< double > & similarity_weights () const
 Get similarity weights.
virtual bool weighted_least_squares_fit (vnl_vector< double > &params, vnl_matrix< double > &norm_covar, const vcl_vector< double > *weights=0) const =0
 Compute the parameter vector and the normalised covariance matrix.

Protected Member Functions

void set_param_dof (unsigned int dof)
 Set the degrees of freedom.
void set_num_samples_for_fit (unsigned int num_samp)
 Set the number of samples needed for a unique fit.
void set_scale_type (scale_t t)
 Set the type of prior scale.

Private Attributes

unsigned int dof_
unsigned int num_samples_for_fit_
scale_t scale_type_
double single_scale_
vcl_vector< double > * multiple_scales_
vcl_vector< double > similarity_weights_

Detailed Description

Base class for (robust) estimation problems.

A fundamental design decision is that the objective function to be minimized is not tied to the class. This allows different robust objective functions to be used with the same data and function model. A disadvantage is that computing the derivative of the objective with respect to the data or the model parameters is not straightforward. So far this hasn't proven to be a problem.

A second design decision is that functions are provided for indirect access to the data for residual and weight calculation and to support random sampling operations. Only a few key functions are pure virtual; others will cause an abort (with an error message) unless overridden. This allows errors to be detected (albeit at run-time) if they are used improperly without requiring subclasses to redefine unneeded functions. For example, if a derived class does not implement compute_weights(), then attempting to solve that problem with IRLS will cause an abort at runtime.

Definition at line 32 of file rrel_estimation_problem.h.


Member Enumeration Documentation

Type of scale information this problem provides.

NONE: problem does not provide any scale information. SINGLE: problem provides a single prior scale (homoscedastic data). MULTIPLE: problem provides a scale for each residual (heteroscedastic data).

Enumerator:
NONE 
SINGLE 
MULTIPLE 

Definition at line 40 of file rrel_estimation_problem.h.


Constructor & Destructor Documentation

rrel_estimation_problem::rrel_estimation_problem ( unsigned int  param_dof,
unsigned int  num_samples_for_fit 
)

Constructor.

See the comments for param_dof() and num_samples_to_instantiate() for the meaning of these two parameters.

Definition at line 9 of file rrel_estimation_problem.cxx.

rrel_estimation_problem::rrel_estimation_problem ( )

Constructor.

Derived classes using this _must_ call set_dof() and set_num_samples_for_fit().

Definition at line 19 of file rrel_estimation_problem.cxx.

rrel_estimation_problem::~rrel_estimation_problem ( ) [virtual]

Destructor.

Definition at line 26 of file rrel_estimation_problem.cxx.


Member Function Documentation

virtual void rrel_estimation_problem::compute_residuals ( const vnl_vector< double > &  params,
vcl_vector< double > &  residuals 
) const [pure virtual]

Compute the residuals relative to the given parameter vector.

The number of residuals must be equal to the value returned by num_samples().

This is a deterministic procedure, in that multiple calls with a given parameter vector must return the same residuals (in the same order).

Implemented in rrel_linear_regression, rrel_homography2d_est, rrel_affine_est, rrel_quad_est, rrel_shift2d_est, and rrel_orthogonal_regression.

void rrel_estimation_problem::compute_weights ( const vcl_vector< double > &  residuals,
const rrel_wls_obj obj,
double  scale,
vcl_vector< double > &  weights 
) const [virtual]

Compute the weights for the given residuals.

The residuals are essentially those returned by compute_residuals(). The default behaviour is to apply obj->wgt() to each residual. Some problems, however, many need to augment the weights. Such problems should override this function (but may want to call this to compute the "basic" weights).

Definition at line 33 of file rrel_estimation_problem.cxx.

virtual bool rrel_estimation_problem::fit_from_minimal_set ( const vcl_vector< int > &  ,
vnl_vector< double > &   
) const [pure virtual]

Generate a parameter vector from a minimal sample set.

The point_indices vector are indices into the data set, and must be filled in with num_samples_to_instantiate() indices. Returns true if and only if the points resulted in a unique parameter vector.

Implemented in rrel_linear_regression, rrel_homography2d_est, rrel_affine_est, rrel_quad_est, rrel_shift2d_est, and rrel_orthogonal_regression.

virtual unsigned int rrel_estimation_problem::num_samples ( ) const [pure virtual]
unsigned int rrel_estimation_problem::num_samples_to_instantiate ( ) const [inline]

Minimum number of samples required to uniquely instantiate a fit.

dof()/num_samples_to_instantiate() gives the number of constraints per sample.

Definition at line 61 of file rrel_estimation_problem.h.

virtual unsigned int rrel_estimation_problem::num_unique_samples ( ) const [inline, virtual]

The number of "unique" samples.

In most problems, this equals num_samples. With estimation problems involving non-unique correspondences, however, the total number of possible correspondences (= num_samples()) generally much greater than the number of "unique samples" (which would be the number of points from one image).

This is used by random sampling techniques to determine the number of samples required to get a given probability of success.

Definition at line 84 of file rrel_estimation_problem.h.

unsigned int rrel_estimation_problem::param_dof ( ) const [inline]

The degrees of freedom in the parameter set.

Definition at line 57 of file rrel_estimation_problem.h.

const vcl_vector< double > & rrel_estimation_problem::prior_multiple_scales ( ) const [virtual]

The prior scale vector, if available.

The call is valid only if scale_type() == MULTIPLE.

Definition at line 59 of file rrel_estimation_problem.cxx.

double rrel_estimation_problem::prior_scale ( ) const [virtual]

The prior scale, if available.

The call is valid only if scale_type() == SINGLE.

Definition at line 66 of file rrel_estimation_problem.cxx.

virtual unsigned int rrel_estimation_problem::residual_dof ( ) const [inline, virtual]

The degrees of freedom in the residual.

Most of the time, this would be 1 since the residual comes from a single random variable. In some problems, however, the error is the combination of more than one random variable. (For example, if the residual is a 2d Euclidean distance with possible error in both coordinates, the degrees of freedom in the error will be 2.)

Reimplemented in rrel_homography2d_est, and rrel_shift2d_est.

Definition at line 73 of file rrel_estimation_problem.h.

virtual scale_t rrel_estimation_problem::scale_type ( ) const [inline, virtual]

Type of scale information the problem provides.

Definition at line 116 of file rrel_estimation_problem.h.

void rrel_estimation_problem::set_no_prior_scale ( ) [virtual]

Removes the scale information for the problem.

Side effect: set scale_type() = NONE.

Definition at line 90 of file rrel_estimation_problem.cxx.

void rrel_estimation_problem::set_num_samples_for_fit ( unsigned int  num_samp) [inline, protected]

Set the number of samples needed for a unique fit.

Definition at line 167 of file rrel_estimation_problem.h.

void rrel_estimation_problem::set_param_dof ( unsigned int  dof) [inline, protected]

Set the degrees of freedom.

Definition at line 164 of file rrel_estimation_problem.h.

void rrel_estimation_problem::set_prior_multiple_scales ( const vcl_vector< double > &  scales) [virtual]

Sets the scales for heteroscedastic data.

Side effect: set scale_type() = MULTIPLE.

Definition at line 73 of file rrel_estimation_problem.cxx.

void rrel_estimation_problem::set_prior_scale ( double  scale) [virtual]

Sets the scale for homoscedastic data.

Side effect: set scale_type() = SINGLE.

Definition at line 83 of file rrel_estimation_problem.cxx.

void rrel_estimation_problem::set_scale_type ( scale_t  t) [inline, protected]

Set the type of prior scale.

Definition at line 170 of file rrel_estimation_problem.h.

void rrel_estimation_problem::set_similarity_weights ( const vcl_vector< double > &  wgts) [inline]

Set similarity weights.

Currently it is only used in wgted random sampling search

Definition at line 140 of file rrel_estimation_problem.h.

const vcl_vector<double>& rrel_estimation_problem::similarity_weights ( ) const [inline]

Get similarity weights.

Definition at line 144 of file rrel_estimation_problem.h.

virtual bool rrel_estimation_problem::weighted_least_squares_fit ( vnl_vector< double > &  params,
vnl_matrix< double > &  norm_covar,
const vcl_vector< double > *  weights = 0 
) const [pure virtual]

Compute the parameter vector and the normalised covariance matrix.

(Multiplying this matrix by the variance in the measurements gives the covariance matrix.)

If the weights are provided they are used in the process. Note that if the weights are in fact given, the number of weights (num_wgts) MUST be equal to "num_residuals" returned by the compute_residuals function. If some of the residuals should be ignored as outliers (e.g. as explicitly identified as such by Least Median of Squares), then their weights should just be set to 0.

Implemented in rrel_linear_regression, rrel_homography2d_est, rrel_affine_est, rrel_quad_est, rrel_shift2d_est, and rrel_orthogonal_regression.


Member Data Documentation

unsigned int rrel_estimation_problem::dof_ [private]

Definition at line 173 of file rrel_estimation_problem.h.

vcl_vector<double>* rrel_estimation_problem::multiple_scales_ [private]

Definition at line 177 of file rrel_estimation_problem.h.

Definition at line 174 of file rrel_estimation_problem.h.

Definition at line 175 of file rrel_estimation_problem.h.

vcl_vector<double> rrel_estimation_problem::similarity_weights_ [private]

Definition at line 178 of file rrel_estimation_problem.h.

Definition at line 176 of file rrel_estimation_problem.h.


The documentation for this class was generated from the following files: