FeatureMomentGravityCenterNormalized

class FeatureMomentGravityCenterNormalized

Bases: FeatureMoment

Functionality computation for centered and normalized moment feature. Computes the interaction matrix associated with vpMomentGravityCenterNormalized .

It computes the interaction matrices for \((x_n,y_n)\) . The interaction matrix for the moment feature has the following expression:

  • In the discrete case:

    \[\begin{split}L_{x_n} = { \left[ \begin{array}{c} -Ax_{{n}}\theta+ \left( x_{{n}}e_{{1,1}}-y_{{n}} \right) B-a_{{n}}C \\\noalign{\medskip}Ax_{{n}}e_{{1,1}}+Bx_{{n}} \theta \\\noalign{\medskip} \left( -a_{{n}}-w_{{y}} \right) A+Bw_{{x}} \\\noalign{\medskip}a_{{n}}e_{{1,1}}{\it NA}+ \left( \eta_{{1,0}}e_{{1,1}}+\eta_{{0,1}}-e_{{2,1}}-x_{{g}}e_{{1,1}}+\eta_{{0,1}}\theta \right) x_{{n}}+ \left( \eta_{{1,0}}-x_{{g}}\theta \right) y_{{n}}-{\frac {x_{{n}}\eta_{{0,3}}}{{\it NA}}} \\\noalign{\medskip} \left( -1+\theta \right) a_{{n}}{\it NA}+ \left( e_{{1,2}}+x_{{g}}-\eta_{{0,1}}e_{{1,1}}-2\,\eta_{{1,0}}+e_{{3,0}}+ \left( -x_{{g}}+\eta_{{1,0}} \right) \theta \right) x_{{n}}+e_{{1,1}}x_{{g}}y_{{n}}-a_{{n}} \\\noalign{\medskip}y_{{n}} \end{array} \right] }^t \end{split}\]
    \[\begin{split}L_{y_n} = { \left[ \begin{array}{c} \left( 1-\theta \right) y_{{n}}A+y_{{n}}e_{{1,1}}B \\\noalign{\medskip} \left( -x_{{n}}+y_{{n}}e_{{1,1}} \right) A+ \left( -1+\theta \right) y_{{n}}B-a_{{n}}C \\\noalign{\medskip}-Aw_{{y}}+ \left( -a_{{n}}+w_{{x}} \right) B \\\noalign{\medskip}\theta\,a_{{n}}{\it NA}+ \left( -e_{{2,1}}+\eta_{{1,0}}e_{{1,1}}+\eta_{{0,1}}-x_{{g}}e_{{1,1}}+ \left( \eta_{{0,1}}-y_{{g}} \right) \theta \right) y_{{n}}+a_{{n}}-{\frac {y_{{n}}\eta_{{0,3}}}{{\it NA}}} \\\noalign{\medskip}-a_{{n}}e_{{1,1}}{\it NA}-x_{{n}}\eta_{{0,1}}+\left( e_{{1,2}}+y_{{g}}e_{{1,1}}-\eta_{{0,1}}e_{{1,1}}+x_{{g}}+e_{{3,0}}-2\,\eta_{{1,0}}+ \left( -x_{{g}}+\eta_{{1,0}} \right) \theta \right) y_{{n}} \\\noalign{\medskip}-x_{{n}} \end{array} \right] }^t \end{split}\]
  • In the dense case:

    \[\begin{split}L_{x_n} = { \left[ \begin {array}{c} -a_{{n}}C-1/2\,Ax_{{n}}-By_{{n}} \\\noalign{\medskip}1/2\,Bx_{{n}} \\\noalign{\medskip} \left( -a_{{n}}-w_{{y}} \right) A+Bw_{{x}} \\\noalign{\medskip} \left( 4\,\eta_{{1,0}}-1/2\,x_{{g}} \right) y_{{n}}+4\,a_{{n}}\eta_{{1,1}}+4\,x_{{n}}\eta_{{0,1}} \\\noalign{\medskip} \left( -4\,\eta_{{1,0}}+1/2\,x_{{g}} \right) x_{{n}}+ \left( -1-4\,\eta_{{2,0}} \right) a_{{n}} \\\noalign{\medskip}y_{{n}}\end {array} \right] }^t L_{y_n} = { \left[ \begin {array}{c} 1/2\,Ay_{{n}} \\\noalign{\medskip}-1/2\,By_{{n}}-a_{{n}}C-Ax_{{n}} \\\noalign{\medskip}-Aw_{{y}}+ \left( -a_{{n}}+w_{{x}} \right) B \\\noalign{\medskip}4\,\theta\,a_{{n}}{\it NA}+ \left( 4\,\eta_{{0,1}}-1/2\,y_{{g}} \right) y_{{n}}+a_{{n}} \\\noalign{\medskip} \left( -4\,\eta_{{1,0}}+1/2\,x_{{g}} \right) y_{{n}}-4\,a_{{n}}\eta_{{1,1}}-4\,x_{{n}}\eta_{{0,1}} \\\noalign{\medskip}-x_{{n}} \end {array} \right] }^t \end{split}\]

with:

  • \(e_{i,j}=\frac{\mu_{i,j}}{NA}\)

  • \(NA=\mu_{2,0}+\mu_{0,2}\)

  • \(\theta=\frac{\eta_{0,2}}{NA}\)

  • \(\eta\) is the centered and normalized moment.

These interaction matrices may be selected afterwards by calling vpFeatureMomentGravityCenterNormalized::interaction . The selection is done by the following methods: vpFeatureMomentGravityCenterNormalized::selectXn for \(L_{x_{n}}\) and vpFeatureMomentGravityCenterNormalized::selectYn for \(L_{y_{n}}\) . You can use these shortcut selectors as follows:

task.addFeature(db_src.getFeatureGravityNormalized(),db_dst.getFeatureGravityNormalized(),
               vpFeatureMomentGravityCenterNormalized::selectXn() | vpFeatureMomentGravityCenterNormalized::selectYn());

The behaviour of this feature is very similar to vpFeatureMomentGravityCenter which also contains a sample code demonstrating a selection.

This feature is often used in moment-based visual servoing to control the planar translation parameters.

Minimum vpMomentObject order needed to compute this feature: 2 in dense mode and 3 in discrete mode.

This feature depends on:

  • vpFeatureMomentGravityCenter

  • vpMomentGravityCenter

  • vpMomentAreaNormalized

  • vpFeatureMomentAreaNormalized

Methods

__init__

compute_interaction

Overloaded function.

momentName

Associated moment name.

name

Feature name.

selectXn

Shortcut selector for \(x_n\) .

selectYn

Shortcut selector for \(y_n\) .

Inherited Methods

user

BasicFeatureSelect

Indicates who should deallocate the feature.

error

Compute the error between two visual features from a subset of the possible features.

setFlags

Set feature flags to true to prevent warning when re-computing the interaction matrix without having updated the feature.

FEATURE_ALL

getDimension

Overloaded function.

linkTo

Links the feature to the feature's database.

getDeallocate

init

Initialize common parameters for moment features.

interaction

Retrieves the interaction matrix.

dimension_s

Return the dimension of the feature vector \(\bf s\) .

setDeallocate

selectAll

Select all the features.

printDependencies

Interface function to display the moments and other interaction matrices on which a particular vpFeatureMoment is dependent upon Not made pure to maintain compatibility Recommended : Types inheriting from vpFeatureMoment should implement this function.

display

Overloaded function.

update

Updates the interaction matrices with the image plane the camera is facing.

get_s

Get the feature vector \(\bf s\) .

BasicFeatureDeallocatorType

Indicates who should deallocate the feature.

vpServo

print

Outputs the content of the feature: it's corresponding selected moments.

Operators

__doc__

__init__

__module__

Attributes

FEATURE_ALL

__annotations__

user

vpServo

class BasicFeatureDeallocatorType(self, value: int)

Bases: pybind11_object

Indicates who should deallocate the feature.

Values:

  • user

  • vpServo

__and__(self, other: object) object
__eq__(self, other: object) bool
__ge__(self, other: object) bool
__getstate__(self) int
__gt__(self, other: object) bool
__hash__(self) int
__index__(self) int
__init__(self, value: int)
__int__(self) int
__invert__(self) object
__le__(self, other: object) bool
__lt__(self, other: object) bool
__ne__(self, other: object) bool
__or__(self, other: object) object
__rand__(self, other: object) object
__ror__(self, other: object) object
__rxor__(self, other: object) object
__setstate__(self, state: int) None
__xor__(self, other: object) object
property name : str
class BasicFeatureSelect(self, value: int)

Bases: pybind11_object

Indicates who should deallocate the feature.

Values:

  • user

  • vpServo

__and__(self, other: object) object
__eq__(self, other: object) bool
__ge__(self, other: object) bool
__getstate__(self) int
__gt__(self, other: object) bool
__hash__(self) int
__index__(self) int
__init__(self, value: int)
__int__(self) int
__invert__(self) object
__le__(self, other: object) bool
__lt__(self, other: object) bool
__ne__(self, other: object) bool
__or__(self, other: object) object
__rand__(self, other: object) object
__ror__(self, other: object) object
__rxor__(self, other: object) object
__setstate__(self, state: int) None
__xor__(self, other: object) object
property name : str
__init__(*args, **kwargs)
compute_interaction(*args, **kwargs)

Overloaded function.

  1. compute_interaction(self: visp._visp.visual_features.FeatureMomentGravityCenterNormalized) -> None

Computes interaction matrix for centered and normalized moment. Called internally. The moment primitives must be computed before calling this. This feature depends on:

  • vpMomentCentered

  • vpMomentAreaNormalized

  • vpMomentGravityCenter

  1. compute_interaction(self: visp._visp.visual_features.FeatureMoment) -> None

dimension_s(self) int

Return the dimension of the feature vector \(\bf s\) .

display(*args, **kwargs)

Overloaded function.

  1. display(self: visp._visp.visual_features.FeatureMoment, cam: visp._visp.core.CameraParameters, I: visp._visp.core.ImageGray, color: visp._visp.core.Color = vpColor::green, thickness: int = 1) -> None

Not implemented since visual representation of a moment doesn’t often make sense.

  1. display(self: visp._visp.visual_features.FeatureMoment, cam: visp._visp.core.CameraParameters, I: visp._visp.core.ImageRGBa, color: visp._visp.core.Color = vpColor::green, thickness: int = 1) -> None

Not implemented since visual representation of a moment doesn’t often make sense.

error(self, s_star: visp._visp.visual_features.BasicFeature, select: int = FEATURE_ALL) visp._visp.core.ColVector

Compute the error between two visual features from a subset of the possible features.

getDeallocate(self) visp._visp.visual_features.BasicFeature.BasicFeatureDeallocatorType
getDimension(*args, **kwargs)

Overloaded function.

  1. getDimension(self: visp._visp.visual_features.FeatureMoment, select: int = FEATURE_ALL) -> int

Feature’s dimension according to selection.

  1. getDimension(self: visp._visp.visual_features.BasicFeature, select: int = FEATURE_ALL) -> int

Get the feature vector dimension.

get_s(self, select: int = FEATURE_ALL) visp._visp.core.ColVector

Get the feature vector \(\bf s\) .

init(self) None

Initialize common parameters for moment features.

interaction(self, select: int = FEATURE_ALL) visp._visp.core.Matrix

Retrieves the interaction matrix. No computation is done.

There is no rule about the format of the feature selector. It may be different for different features. For example, for vpFeatureMomentBasic or vpFeatureMomentCentered features, select may refer to the \((i,j)\) couple in the \(j \times order + i\) format, but for vpFeatureMomentCInvariant the selector allows to select couples \((i,j,k,l...)\) in the following format: 1 << i

  • 1 << j + 1 << k + 1 << l.

Parameters:
select: int = FEATURE_ALL

Feature selector.

Returns:

The corresponding interaction matrix.

linkTo(self, featureMoments: visp._visp.visual_features.FeatureMomentDatabase) None

Links the feature to the feature’s database.

Note

The feature’s database is different from the moment’s database.

Parameters:
featureMoments: visp._visp.visual_features.FeatureMomentDatabase

database in which the moment features are stored.

momentName(self) str

Associated moment name.

name(self) str

Feature name.

print(self, select: int = FEATURE_ALL) None

Outputs the content of the feature: it’s corresponding selected moments.

printDependencies(self: visp._visp.visual_features.FeatureMoment, os: std::ostream) None

Interface function to display the moments and other interaction matrices on which a particular vpFeatureMoment is dependent upon Not made pure to maintain compatibility Recommended : Types inheriting from vpFeatureMoment should implement this function.

static selectAll() int

Select all the features.

static selectXn() int

Shortcut selector for \(x_n\) .

static selectYn() int

Shortcut selector for \(y_n\) .

setDeallocate(self, d: visp._visp.visual_features.BasicFeature.BasicFeatureDeallocatorType) None
setFlags(self) None

Set feature flags to true to prevent warning when re-computing the interaction matrix without having updated the feature.

update(self, A: float, B: float, C: float) None

Updates the interaction matrices with the image plane the camera is facing. The plane must be in the format: \(\frac{1}{Z}=Ax+By+C\) . The moment primitives MUST be updated before calling this function.

This method also computes the interaction matrix. Therefore, you must call vpFeatureMoment::update before calling vpFeatureMoment::interaction .

Warning

The behaviour of this method is not the same as vpMoment::update which only acknowledges the new object. This method also computes the interaction matrices.