FeatureMomentDatabase

class FeatureMomentDatabase(self)

Bases: pybind11_object

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 additional 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/vpMomentBasic.h>
#include <visp3/core/vpMomentCInvariant.h>
#include <visp3/core/vpMomentCentered.h>
#include <visp3/core/vpMomentDatabase.h>
#include <visp3/core/vpMomentGravityCenter.h>
#include <visp3/core/vpMomentObject.h>

#include <iostream>
#include <vector>
#include <visp3/visual_features/vpFeatureMomentBasic.h>
#include <visp3/visual_features/vpFeatureMomentCInvariant.h>
#include <visp3/visual_features/vpFeatureMomentCentered.h>
#include <visp3/visual_features/vpFeatureMomentDatabase.h>

#ifdef ENABLE_VISP_NAMESPACE
using namespace VISP_NAMESPACE_NAME;
#endif

int main()
{
  try {

    vpPoint p;
    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);

    //////////////////////////////REFERENCE VALUES////////////////////////////////
    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;
}

Default constructor.

Methods

__init__

Default constructor.

get

param feature_name:

The name of the feature, the one specified when using add

updateAll

Update all moment features in the database with plane coefficients

Inherited Methods

Operators

__annotations__

__doc__

__init__

Default constructor.

__module__

Attributes

__annotations__

__init__(self)

Default constructor.

get(self, feature_name: str, found: bool) tuple[visp._visp.visual_features.FeatureMoment, bool]
Parameters:
feature_name: str

The name of the feature, the one specified when using add

found: bool

true if the type string is found inside the database, false otherwise

Returns:

A tuple containing:

  • the moment feature corresponding to the type string

  • found: true if the type string is found inside the database, false otherwise

updateAll(self, A: float = 0.0, B: float = 0.0, C: float = 1.0) None

Update all moment features in the database with plane coefficients

Parameters:
A: float = 0.0

first plane coefficient for a plane equation of the following type Ax+By+C=1/Z

B: float = 0.0

second plane coefficient for a plane equation of the following type Ax+By+C=1/Z

C: float = 1.0

third plane coefficient for a plane equation of the following type Ax+By+C=1/Z