RobWorkProject  23.9.11-
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
RANSACModel< MODEL, DATA > Class Template Referenceabstract

An interface for RANSAC model fitting. More...

#include <RANSACModel.hpp>

Public Types

typedef rw::core::Ptr< RANSACModel< MODEL, DATA > > Ptr
 Smart pointer type to this class.
 

Public Member Functions

 RANSACModel ()
 Constructor.
 
virtual MODEL make (const std::vector< DATA > &data) const
 Creates a new model of this type using provided data.
 
virtual ~RANSACModel ()
 Destructor.
 
bool operator< (const MODEL &model) const
 'Worse than' operator. More...
 
bool operator> (const MODEL &model) const
 'Better than' operator. More...
 
virtual double fitError (const DATA &sample) const =0
 Calculates the fitting error of a sample.
 
virtual bool belongsTo (const DATA &sample, double threshold) const
 Check whether a sample belongs to the model. More...
 
virtual bool invalid () const =0
 Checks whether the model is invalid.
 
virtual double refit (const std::vector< DATA > &data)=0
 Recalculates the model based on provided samples. More...
 
virtual int getMinReqData () const =0
 Returns the number of samples required to create the model. More...
 
virtual bool same (const MODEL &model, double threshold) const =0
 Tests whether the model is same to a threshold of another model. More...
 
size_t getNumberOfInliers () const
 Get the number of inliers.
 
double getQuality () const
 Get the model quality. More...
 
void setQuality (double quality)
 Set the model quality. More...
 
std::vector< DATA > & getData ()
 Access data.
 
const std::vector< DATA > & getData () const
 Access data.
 
std::vector< size_t > getInlierIndices () const
 Get the vector of inlier indices. More...
 

Static Public Member Functions

static std::vector< MODEL > findModels (const std::vector< DATA > &data, int maxIterations, int dataRequired, double dataThreshold, double modelThreshold)
 Find models fitting a set of observations. More...
 
static MODEL bestModel (const std::vector< MODEL > &models)
 Select the model with the largest number of inliers. More...
 
static MODEL likelyModel (const std::vector< MODEL > &models)
 Select a model randomly, with a chance based on the number of inliers. More...
 

Protected Attributes

std::vector< DATA > _data
 
double _quality
 
std::vector< size_t > _indices
 

Detailed Description

template<class MODEL, class DATA>
class rwlibs::algorithms::RANSACModel< MODEL, DATA >

An interface for RANSAC model fitting.

Todo:
A model needs to remember the indices of inliers from the set of data...

Member Function Documentation

◆ belongsTo()

virtual bool belongsTo ( const DATA &  sample,
double  threshold 
) const
inlinevirtual

Check whether a sample belongs to the model.

Returns true when the sample is within a threshold distance of the model.

◆ bestModel()

static MODEL bestModel ( const std::vector< MODEL > &  models)
inlinestatic

Select the model with the largest number of inliers.

In case of ties, pick the model with better quality.

◆ findModels()

static std::vector<MODEL> findModels ( const std::vector< DATA > &  data,
int  maxIterations,
int  dataRequired,
double  dataThreshold,
double  modelThreshold 
)
inlinestatic

Find models fitting a set of observations.

Function performs maxIterations iterations and finds a number of initial models. The models are then filtered, and those within a distance of modelThreshold are merged together.

Parameters
data[in] set of data points to find a model for
maxIterations[in] number of iterations to perform
dataRequired[in] a number of data points required to fit into model to consider it plausible
dataThreshold[in] a threshold for fitting error of a data point
modelThreshold[in] a difference between models neccesary to consider them different
Returns
a vector of fitted models

◆ getInlierIndices()

std::vector<size_t> getInlierIndices ( ) const
inline

Get the vector of inlier indices.

Returns
a vector of indices of inliers in the data vector supplied to findModels function.

◆ getMinReqData()

virtual int getMinReqData ( ) const
pure virtual

Returns the number of samples required to create the model.

No model will be found, if data size is less than this amount.

Implemented in StructuredLineModel, StablePose1DModel, StablePose0DModel, PointModel, PlaneModel, and LineModel.

◆ getQuality()

double getQuality ( ) const
inline

Get the model quality.

The model quality is a sum of fitting errors for all its inliers.

◆ likelyModel()

static MODEL likelyModel ( const std::vector< MODEL > &  models)
inlinestatic

Select a model randomly, with a chance based on the number of inliers.

Given a vector of models {model1(45 inliers), model2(30 inliers), model3(20 inliers), model4(5 inliers)}, it will pick:

  • model1 - 45% chance,
  • model2 - 30% chance,
  • model3 - 20% chance,
  • model4 - 5% chance

◆ operator<()

bool operator< ( const MODEL &  model) const
inline

'Worse than' operator.

Used for sorting. Compares the number of inliers the models have. In case of ties, compares quality.

◆ operator>()

bool operator> ( const MODEL &  model) const
inline

'Better than' operator.

Used for sorting. Compares the number of inliers the models have. In case of ties, compares quality.

◆ refit()

virtual double refit ( const std::vector< DATA > &  data)
pure virtual

Recalculates the model based on provided samples.

Returns
Fit error on a set of provided samples.

◆ same()

virtual bool same ( const MODEL &  model,
double  threshold 
) const
pure virtual

Tests whether the model is same to a threshold of another model.

This is used to filter down (merge) similar models found in the course of RANSAC algorithm execution.

Implemented in StructuredLineModel, StablePose1DModel, StablePose0DModel, PointModel, PlaneModel, and LineModel.

◆ setQuality()

void setQuality ( double  quality)
inline

Set the model quality.

Parameters
quality[in] fitting error of the model

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