1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Implementation for all supported moment features.
33  *
34  * Authors:
35  * Filip Novotny
36  *
37  *****************************************************************************/
38 /*!
39   \file vpFeatureMomentBasic.h
40   \brief Implementation of the interaction matrix computation for
41   vpMomentBasic.
42 */
43 
44 #ifndef _vpFeatureMomentBasic_h_
45 #define _vpFeatureMomentBasic_h_
46 
47 #include <visp3/core/vpMomentCommon.h>
48 #include <visp3/core/vpMomentObject.h>
49 #include <visp3/visual_features/vpFeatureMoment.h>
50 
51 class vpMomentDatabase;
52 /*!
53   \class vpFeatureMomentBasic
54 
55   \ingroup group_visual_features
56 
57   \brief Functionality computation for basic moment feature. Computes the
58   interaction matrix associated with vpMomentBasic.
59 
60   The interaction matrix for the basic moment feature is defined in
61   \cite Tahri05z, equation (13). This vpFeatureMoment, as well as it's
62   corresponding moment primitive is double-indexed. The interaction matrix \f$
63   L_{m_{ij}} \f$ is obtained by calling vpFeatureMomentBasic::interaction
64   (i,j) and is associated to \f$ m_{ij} \f$ obtained by vpMomentBasic::get
65   (i,j). vpFeatureMomentBasic computes interaction matrices all interaction
66   matrices up to vpMomentObject::getOrder()-1. \attention The maximum order
67   reached by vpFeatureMomentBasic is NOT the maximum order of the
68   vpMomentObject, it is one unit smaller. For example if you define your
69   vpMomentObject up to order n then vpFeatureMomentBasic will be able to
70   compute interaction matrices up to order n-1 that is \f$ L_{m_{ij}} \f$ with
71   \f$ i+j<=n-1 \f$.
72 
73     You can see an example of vpFeatureMomentBasic by looking at the
74   documentation of the vpFeatureMoment class.
75 
76     This feature depends on:
77         - vpMomentBasic
78 
79 */
80 class VISP_EXPORT vpFeatureMomentBasic : public vpFeatureMoment
81 {
82 protected:
83   unsigned int order;
84 
85 public:
86   vpFeatureMomentBasic(vpMomentDatabase &moments, double A, double B, double C,
87                        vpFeatureMomentDatabase *featureMoments = NULL);
88   void compute_interaction();
89 
90 #ifndef DOXYGEN_SHOULD_SKIP_THIS
91   /* Add function due to pure virtual definition in vpBasicFeature.h */
interaction(unsigned int)92   vpMatrix interaction(unsigned int /* select = FEATURE_ALL */)
93   {
94     throw vpException(vpException::functionNotImplementedError, "Not implemented!");
95   }
96 #endif
97 
98   vpMatrix interaction(unsigned int select_one, unsigned int select_two) const;
99   /*!
100     Associated moment name.
101     */
momentName()102   const char *momentName() const { return "vpMomentBasic"; }
103   /*!
104     Feature name.
105     */
name()106   const char *name() const { return "vpFeatureMomentBasic"; }
107 };
108 #endif
109