Visual Servoing Platform
version 3.7.0
Toggle main menu visibility
Loading...
Searching...
No Matches
vpMomentAreaNormalized.cpp
1
/*
2
* ViSP, open source Visual Servoing Platform software.
3
* Copyright (C) 2005 - 2025 by Inria. All rights reserved.
4
*
5
* This software is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
9
* See the file LICENSE.txt at the root directory of this source
10
* distribution for additional information about the GNU GPL.
11
*
12
* For using ViSP with software that can not be combined with the GNU
13
* GPL, please contact Inria about acquiring a ViSP Professional
14
* Edition License.
15
*
16
* See https://visp.inria.fr for more information.
17
*
18
* This software was developed at:
19
* Inria Rennes - Bretagne Atlantique
20
* Campus Universitaire de Beaulieu
21
* 35042 Rennes Cedex
22
* France
23
*
24
* If you have questions regarding the use of this file, please contact
25
* Inria at visp@inria.fr
26
*
27
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29
*
30
* Description:
31
* 2D normalized surface moment descriptor (usually described as An)
32
*
33
* Authors:
34
* Filip Novotny
35
*/
36
#include <cmath>
37
#include <visp3/core/vpMomentAreaNormalized.h>
38
#include <visp3/core/vpMomentCentered.h>
39
#include <visp3/core/vpMomentDatabase.h>
40
#include <visp3/core/vpMomentObject.h>
41
42
BEGIN_VISP_NAMESPACE
43
48
void
vpMomentAreaNormalized::compute
()
49
{
50
bool
found_moment_centered;
51
52
/* getMoments() returns a reference to a vpMomentDatabase. (a protected
53
* member inherited from vpMoment)
54
*.get() is a member function of vpMomentDatabase that returns
55
* a specific moment which is linked to it
56
* */
57
const
vpMomentCentered
&momentCentered =
58
static_cast<
const
vpMomentCentered
&
>
(
getMoments
().
get
(
"vpMomentCentered"
, found_moment_centered));
59
60
if
(!found_moment_centered)
61
throw
vpException
(
vpException::notInitialized
,
"vpMomentCentered not found"
);
62
63
double
a;
64
/* getObject() returns a reference to the vpMomentObject from which
65
* the moment values are calculated. (public member of vpMoment)*/
66
if
(
getObject
().getType() ==
vpMomentObject::DISCRETE
)
67
a = momentCentered.
get
(2, 0) + momentCentered.
get
(0, 2);
68
else
69
a =
getObject
().
get
(0, 0);
70
71
values
[0] = desiredDepth * sqrt(desiredSurface / a);
72
}
73
79
vpMomentAreaNormalized::vpMomentAreaNormalized
(
double
a_star,
double
Z_star)
80
:
vpMoment
(), desiredSurface(a_star), desiredDepth(Z_star)
81
{
82
values
.resize(1);
83
}
84
93
void
vpMomentAreaNormalized::printDependencies
(std::ostream &os)
const
94
{
95
os << (__FILE__) << std::endl;
96
os <<
"Desired depth Z* = "
<< desiredDepth << std::endl;
97
os <<
"Desired area m00* = "
<< desiredSurface << std::endl;
98
99
bool
found_moment_centered;
100
const
vpMomentCentered
&momentCentered =
101
static_cast<
const
vpMomentCentered
&
>
(
getMoments
().
get
(
"vpMomentCentered"
, found_moment_centered));
102
if
(!found_moment_centered)
103
throw
vpException
(
vpException::notInitialized
,
"vpMomentCentered not found"
);
104
105
double
a;
106
if
(
getObject
().getType() ==
vpMomentObject::DISCRETE
)
107
a = momentCentered.
get
(2, 0) + momentCentered.
get
(0, 2);
108
else
109
a =
getObject
().
get
(0, 0);
110
os <<
"a = "
<< a << std::endl;
111
}
112
116
VISP_EXPORT std::ostream &
operator<<
(std::ostream &os,
const
vpMomentAreaNormalized
&m)
117
{
118
os << (__FILE__) << std::endl;
119
os <<
"An = "
<< m.
values
[0] << std::endl;
120
return
os;
121
}
122
END_VISP_NAMESPACE
vpException
error that can be emitted by ViSP classes.
Definition
vpException.h:60
vpException::notInitialized
@ notInitialized
Used to indicate that a parameter is not initialized.
Definition
vpException.h:74
vpMomentAreaNormalized::operator<<
friend VISP_EXPORT std::ostream & operator<<(std::ostream &os, const vpMomentAreaNormalized &v)
Definition
vpMomentAreaNormalized.cpp:116
vpMomentAreaNormalized::compute
void compute() VP_OVERRIDE
Definition
vpMomentAreaNormalized.cpp:48
vpMomentAreaNormalized::printDependencies
void printDependencies(std::ostream &os) const VP_OVERRIDE
Definition
vpMomentAreaNormalized.cpp:93
vpMomentAreaNormalized::vpMomentAreaNormalized
vpMomentAreaNormalized(double a_star, double Z_star)
Definition
vpMomentAreaNormalized.cpp:79
vpMomentCentered
This class defines the double-indexed centered moment descriptor .
Definition
vpMomentCentered.h:77
vpMomentCentered::get
double get(unsigned int i, unsigned int j) const
Definition
vpMomentCentered.cpp:99
vpMomentDatabase::get
const vpMoment & get(const std::string &moment_name, bool &found) const
Definition
vpMomentDatabase.cpp:63
vpMomentObject::DISCRETE
@ DISCRETE
Definition
vpMomentObject.h:237
vpMomentObject::get
const std::vector< double > & get() const
Definition
vpMomentObject.cpp:538
vpMoment::getObject
const vpMomentObject & getObject() const
Definition
vpMoment.h:150
vpMoment::values
std::vector< double > values
Definition
vpMoment.h:113
vpMoment::getMoments
vpMomentDatabase & getMoments() const
Definition
vpMoment.h:118
vpMoment::vpMoment
vpMoment(const vpMoment &)=delete
BEGIN_VISP_NAMESPACE
Definition
vpMbtDistanceCircle.cpp:55
modules
core
src
tracking
moments
vpMomentAreaNormalized.cpp
Generated by
1.17.0