Visual Servoing Platform  version 3.3.0 under development (2020-02-17)
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)
 

Friends

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)
vec_p.push_back(p);
p.set_x(2); p.set_y(2); // coordinates in meters in the image plane (vertex 2)
vec_p.push_back(p);
vpMomentObject obj(6); // Init object of order 6 because we are
// computing C-invariants
obj.setType(vpMomentObject::DISCRETE); // Discrete mode for object
obj.fromVector(vec_p);
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
mdb.updateAll(obj);
// Compute moments in the correct order with the object
bm.compute();
gc.compute();
mc.compute();
ci.compute();
// update the whole feature moment database with a plane
fmb.update(0.,0.,1.);
fmc.update(0.,0.,1.);
fci.update(0.,0.,1.);
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::vpFeatureMomentDatabase ( )
inline

Default constructor.

Definition at line 172 of file vpFeatureMomentDatabase.h.

◆ ~vpFeatureMomentDatabase()

virtual vpFeatureMomentDatabase::~vpFeatureMomentDatabase ( )
inlinevirtual

Virtual destructor that does nothing.

Definition at line 176 of file vpFeatureMomentDatabase.h.

Member Function Documentation

◆ get()

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

Retrieves a moment feature from the database

Parameters
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
Returns
the moment feature corresponding to the type string

Definition at line 64 of file vpFeatureMomentDatabase.cpp.

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

◆ updateAll()

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

Update all moment features in the database with plane coefficients

Parameters
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

◆ vpFeatureMoment

friend class vpFeatureMoment
friend

Definition at line 183 of file vpFeatureMomentDatabase.h.