Base class for (robust) estimation problems. More...
#include <rrel_estimation_problem.h>
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 > ¶ms, 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 > ¶ms, 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_ |
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.
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).
Definition at line 40 of file rrel_estimation_problem.h.
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.
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] |
The number of samples.
Implemented in rrel_linear_regression, rrel_homography2d_est, rrel_orthogonal_regression, rrel_shift2d_est, rrel_affine_est, and rrel_quad_est.
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.
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.
unsigned int rrel_estimation_problem::num_samples_for_fit_ [private] |
Definition at line 174 of file rrel_estimation_problem.h.
scale_t rrel_estimation_problem::scale_type_ [private] |
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.
double rrel_estimation_problem::single_scale_ [private] |
Definition at line 176 of file rrel_estimation_problem.h.