Visual Servoing Platform  version 3.2.0 under development (2018-08-19)
vpFeatureMomentDatabase Class Reference

#include <visp3/visual_features/vpFeatureMomentDatabase.h>

+ Inheritance diagram for vpFeatureMomentDatabase:

Public Member Functions

 vpFeatureMomentDatabase ()
virtual ~vpFeatureMomentDatabase ()
virtual void updateAll (double A=0.0, double B=0.0, double C=1.0)
vpFeatureMomentget (const char *type, bool &found)


class vpFeatureMoment

Detailed Description

This class allows to register all feature moments (implemented in vpFeatureMoment... classes) so they can access each other according to their dependencies.

Like moments (implemented in vpMoment... classes), a vpFeatureMoment needs to have access to other vpFeatureMoment's values to be computed. In most cases, a vpFeatureMoment needs both: vpMoments and vpFeatureMoments which explains the two databases (see vpFeatureMoment::vpFeatureMoment). For example vpFeatureMomentAlpha needs additionnal information about centered moments vpMomentCentered AND their interaction matrices obtained by vpFeatureMomentCentered in order to compute the moment's value from a vpMomentObject. Like the vpMomentCentered is stored in a vpMomentDatabase, the vpFeatureMomentCentered should be stored in a vpFeatureMomentDatabase.

All moment features in a database can access each other freely at any time. They can also verify if a moment feature is present in the database or not. This code illustrates the use of both databases to handle dependencies between moment primitives and moment features:

#include <visp3/core/vpPoint.h>
#include <visp3/core/vpMomentObject.h>
#include <visp3/core/vpMomentBasic.h>
#include <visp3/core/vpMomentCInvariant.h>
#include <visp3/core/vpMomentCentered.h>
#include <visp3/core/vpMomentCInvariant.h>
#include <visp3/core/vpMomentGravityCenter.h>
#include <visp3/core/vpMomentDatabase.h>
#include <visp3/visual_features/vpFeatureMomentCInvariant.h>
#include <visp3/visual_features/vpFeatureMomentBasic.h>
#include <visp3/visual_features/vpFeatureMomentCentered.h>
#include <visp3/visual_features/vpFeatureMomentDatabase.h>
#include <iostream>
#include <vector>
int main()
try {
std::vector<vpPoint> vec_p; // vector that contains the vertices
p.set_x(1); p.set_y(1); // coordinates in meters in the image plane (vertex 1)
p.set_x(2); p.set_y(2); // coordinates in meters in the image plane (vertex 2)
vpMomentObject obj(6); // Init object of order 6 because we are
// computing C-invariants
obj.setType(vpMomentObject::DISCRETE); // Discrete mode for object
vpMomentDatabase mdb; // database for moment primitives. This will
// only contain the basic moment.
vpMomentCentered mc; // Centered moment
vpMomentBasic bm; // Basic moment
vpMomentGravityCenter gc; // gravity center
vpMomentCInvariant ci; // C-type invariant
bm.linkTo(mdb); //add basic moment to moment database
mc.linkTo(mdb); //add centered moment to moment database
gc.linkTo(mdb); //add gravity center to moment database
ci.linkTo(mdb); //add C-invariant to moment database
vpFeatureMomentDatabase fmdb; // feature moment database to store
// feature dependencies
// Declare and link moments to database
vpFeatureMomentBasic fmb(mdb,0.,0.,1.,&fmdb); fmb.linkTo(fmdb);
vpFeatureMomentCentered fmc(mdb,0.,0.,1.,&fmdb); fmc.linkTo(fmdb);
vpFeatureMomentCInvariant fci(mdb,0.,0.,1.,&fmdb); fci.linkTo(fmdb);
// update the whole moment database
// Compute moments in the correct order with the object
// update the whole feature moment database with a plane
std::cout << fci.interaction(vpFeatureMomentCInvariant::selectC1()) << std::endl;
catch(const vpException &e){
std::cout << e.getMessage() << std::endl;
return 0;

Definition at line 158 of file vpFeatureMomentDatabase.h.

Constructor & Destructor Documentation

vpFeatureMomentDatabase::vpFeatureMomentDatabase ( )

Default constructor.

Definition at line 172 of file vpFeatureMomentDatabase.h.

virtual vpFeatureMomentDatabase::~vpFeatureMomentDatabase ( )

Virtual destructor that does nothing.

Definition at line 176 of file vpFeatureMomentDatabase.h.

Member Function Documentation

vpFeatureMoment & vpFeatureMomentDatabase::get ( const char *  type,
bool &  found 

Retrieves a moment feature from the database

type: the name of the feature, the one specified when using add
found: true if the type string is found inside the database, false otherwise
the moment feature corresponding to the type string

Definition at line 64 of file vpFeatureMomentDatabase.cpp.

Referenced by vpFeatureMomentCentered::compute_interaction(), and vpFeatureMomentCInvariant::compute_interaction().

void vpFeatureMomentDatabase::updateAll ( double  A = 0.0,
double  B = 0.0,
double  C = 1.0 

Update all moment features in the database with plane coefficients

A: first plane coefficient for a plane equation of the following type Ax+By+C=1/Z
B: second plane coefficient for a plane equation of the following type Ax+By+C=1/Z
C: third plane coefficient for a plane equation of the following type Ax+By+C=1/Z

Reimplemented in vpFeatureMomentCommon.

Definition at line 80 of file vpFeatureMomentDatabase.cpp.

Friends And Related Function Documentation

friend class vpFeatureMoment

Definition at line 183 of file vpFeatureMomentDatabase.h.