Intarfaces and implementation helper classes. More...
Classes | |
class | GeneralizedModelBuilder< ErrorAccumClassT > |
class | Model< ModelT, DatumT > |
class | ModelBuilder< ModelClassT > |
Interface for model builders used in RanSaC. More... | |
class | MultiSolutionModel< ErrorAccumulatorT, CAllocTT > |
class | RanSaCOptions< ErrorAccumClassT > |
class | SingleSolutionModel< ErrorAccumulatorT > |
Implements model inteface for models which have at most one solution. More... | |
Modules | |
Error Functions | |
Data Selectors | |
Files | |
file | model.h |
Model and ModelBuilder interfaces used by RanSaC. | |
Typedefs | |
typedef Model< Matrix3d, ImageMatch > | EMatrixModel |
typedef ModelBuilder < EMatrixModel > | EMatrixModelBuilder |
typedef std::vector< bool > | MaskVec |
mask vector for indication of inliers in data vector (RanSaC). | |
Functions | |
template<class ErrorAccumClassT > | |
shared_ptr< typename ErrorAccumClassT::ModelClassT > | ranSaC (shared_ptr< ModelBuilder< typename ErrorAccumClassT::ModelClassT > > model_builder, shared_ptr< DataSelector< typename ErrorAccumClassT::ModelClassT::DataVec > > data_selector, const typename ErrorAccumClassT::ModelClassT::DataVec &data) |
model estimation using ransac. |
Intarfaces and implementation helper classes.
In the following we describe how to use this module to implement specific robust estimation and show it on simple example. More useful examples can be found in EMatEst and RanSaC__triangulation.
Description of basic types:
The description of interface concepts:
Example:
class CircleAbsError : public DatumErrorFunc<double, Vector2d, double>{ ErrorT operator()(const ModelT& model, const DatumT& obs){ return abs(obs.norm() - model); } } template<ErrorAccumObjT> CircleModelBuilder : public GeneralizedModelBuilder<ErrorAccumObjT>{ public: CircleModelBuilder(const ErrorAccumClassT& _error_accum) : GeneralizedModelBuilder<ErrorAccumClassT>(_error_accum) { } virtual shared_ptr<typename ErrorAccumClassT::ModelClassT> operator()( const typename ErrorAccumClassT::ModelClassT::DataVec & selected){ return shared_ptr<typename ErrorAccumClassT::ModelClassT>( new(SingleSolutionModel<ErrorAccumObjT>(1, selected, selected[0], this->error_accum))); } } double computeModel(const ALIGNED<Vector2d>::vector& data){ typedef RealErrorMaxErrorAccumulator<CircleAbsError> EAccT; EAccT eacc(CircleAbsError()); shared_ptr<ModeB> model_builder = CircleModelBuilder<EAccT>(eacc); //run 100 iterations of ransac. shared_ptr<typename EAccT::ModelClassT> model = ranSaC( model_builder, RandomDataSelector(data, 1, 100), data); if(model && (model->getInlierCount() > 0.2 * data.size())){ std::cout << "model:" << model->getModel() << std::endl; std::cout << "# of inliers:" << model->getInlierCount() << std::endl; std::cout << "max error:" << model->getError() << std::endl; std::cout << "max inlier error:" << model->getInlierError() << std::endl; } else{ std::cout << "did not find any model" << std::endl; } }
typedef Model<Matrix3d, ImageMatch> EMatrixModel |
typedef ModelBuilder<EMatrixModel> EMatrixModelBuilder |
typedef std::vector<bool> MaskVec |
shared_ptr<typename ErrorAccumClassT::ModelClassT> ranSaC | ( | shared_ptr< ModelBuilder< typename ErrorAccumClassT::ModelClassT > > | model_builder, |
shared_ptr< DataSelector< typename ErrorAccumClassT::ModelClassT::DataVec > > | data_selector, | ||
const typename ErrorAccumClassT::ModelClassT::DataVec & | data | ||
) |
model estimation using ransac.
number of RanSaC iterations.
min_inliers | minimum number of inliers for a given model to be accepted. |
Definition at line 321 of file model_estimation.h.