Public Member Functions

TRTK::RansacGenericFittingModel< T > Class Template Reference

This class implements the Ransac::Model interface for all fitting classes. More...

#include <RansacGenericFittingModel.hpp>

Inheritance diagram for TRTK::RansacGenericFittingModel< T >:
Collaboration diagram for TRTK::RansacGenericFittingModel< T >:

List of all members.

Public Member Functions

 RansacGenericFittingModel (Fit< T > &estimator)
 Constructs an instance of RansacGenericFittingModel.
void compute ()
 Estimates the model parameters.
getDeviation (const Coordinate< T > &datum) const
 Returns the amount of how much a datum deviates from the model.
unsigned getMinimumNumberOfItems () const
 Returns the minimum number of items required to compute the model.
getRMS () const
 Returns the root mean square error of the estimated regression model.
void setData (const std::vector< Coordinate< T > > &data)
 Sets the sample data.
void setEstimator (Fit< T > &estimator)
 Sets the fitting class instance.
virtual T getDeviation (const DataType &datum) const =0
 Return the amount of how much a datum deviates from the model.
virtual T getRMSE () const =0
 Return the root mean square error of the estimated regression model.
virtual void setData (const std::vector< DataType > &data)=0
 Set the sample data. No data is copied but a reference is stored.

Detailed Description

template<class T>
class TRTK::RansacGenericFittingModel< T >

This class implements the Ransac::Model interface for all fitting classes.

Template Parameters:
TScalar type (must be a floating point).

Here is an example that shows how to use this class:

 #include <iostream>

 #include <TRTK/FitLine.hpp>
 #include <TRTK/RansacGenericFittingModel.hpp>
 #include <TRTK/Tools.hpp>

 using namespace std;
 using namespace TRTK;
 using namespace TRTK::Tools;

 int main()
 {
     // Construct some points lying on a line and add some noise and outliers.

     vector<Coordinate<double> > points;

     double slope = 0.7;
     double y_intercept = -3;

     for (int i = -10; i < 10; ++i)
     {
         // Noisy measurement.

         double x = i + randn(0.0, 0.1);
         double y = i * slope + y_intercept + randn(0.0, 0.1);

         Coordinate<double> point(x, y);

         points.push_back(point);
     }

     for (int i = 0; i < 5; ++i)
     {
         // Gros outliers.

         double x = rand(-10.0, 10.0);
         double y = rand(-10.0, 10.0);

         Coordinate<double> point(x, y);

         points.push_back(point);
     }

     // Estimate the line parameters using ordinary least sqares.

     FitLine<double> fitLine(points);

     fitLine.compute();

     cout << "Slope: " << fitLine.getSlope() << endl;
     cout << "Y-intercept: " << fitLine.getYIntercept() << endl;
     cout << "Direction Vector: " << fitLine.getDirectionVector() << endl;
     cout << "Distance from origin: " << fitLine.getDistanceFromOrigin() << endl;
     cout << "RMS: " << fitLine.getRMS() << endl << endl;

     // Estimate the line parameters using RANSAC.

     RansacGenericFittingModel<double> model(fitLine);

     Ransac<double> ransac;

     ransac.setModel(model);
     ransac.setData(points);
     ransac.setErrorTolerance(0.2);

     unsigned number_of_samples_used = ransac.compute();

     cout << "Slope: " << fitLine.getSlope() << endl;
     cout << "Y-intercept: " << fitLine.getYIntercept() << endl;
     cout << "Direction Vector: " << fitLine.getDirectionVector() << endl;
     cout << "Distance from origin: " << fitLine.getDistanceFromOrigin() << endl;
     cout << "Number of samples used: " << number_of_samples_used << endl;
     cout << "RMS: " << model.getRMS() << endl;

     return 0;
 }

Output:

 Slope: 0.824709
 Y-intercept: -2.97947
 Direction Vector: (-0.771483, -0.63625)
 Distance from origin: 2.29861
 RMS: 2.27904

 Slope: 0.691347
 Y-intercept: -3.00877
 Direction Vector: (-0.822562, -0.568676)
 Distance from origin: 2.4749
 Number of samples used: 19
 RMS: 0.0712661

For further information, please have a look at the documentation of the particular fitting class and the Ransac class, respectively.

See also:
Ransac, Ransac::Model, Fit
Author:
Christoph Haenisch
Version:
0.1.0
Date:
last changed on 2012-03-23

Definition at line 140 of file RansacGenericFittingModel.hpp.


Constructor & Destructor Documentation

template<class T >
TRTK::RansacGenericFittingModel< T >::RansacGenericFittingModel ( Fit< T > &  estimator )

Constructs an instance of RansacGenericFittingModel.

Parameters:
[in]modelA fitting class.

Definition at line 166 of file RansacGenericFittingModel.hpp.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines