Visual Servoing Platform
version 3.7.0
Toggle main menu visibility
Loading...
Searching...
No Matches
vpFeatureBuilderPoint.cpp
1
/*
2
* ViSP, open source Visual Servoing Platform software.
3
* Copyright (C) 2005 - 2024 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
* Conversion between tracker and visual feature point.
32
*/
33
39
#include <visp3/core/vpDebug.h>
40
#include <visp3/core/vpException.h>
41
#include <visp3/visual_features/vpFeatureBuilder.h>
42
#include <visp3/visual_features/vpFeatureException.h>
43
44
BEGIN_VISP_NAMESPACE
45
#ifdef VISP_HAVE_MODULE_BLOB
90
void
vpFeatureBuilder::create
(
vpFeaturePoint
&s,
const
vpCameraParameters
&cam,
const
vpDot
&d)
91
{
92
try
{
93
double
x = 0, y = 0;
94
95
vpImagePoint
cog;
96
cog = d.getCog();
97
98
vpPixelMeterConversion::convertPoint
(cam, cog, x, y);
99
100
s.set_x(x);
101
s.set_y(y);
102
}
103
catch
(...) {
104
vpERROR_TRACE
(
"Error caught"
);
105
throw
;
106
}
107
}
108
151
void
vpFeatureBuilder::create
(
vpFeaturePoint
&s,
const
vpCameraParameters
&cam,
const
vpDot2
&d)
152
{
153
try
{
154
double
x = 0, y = 0;
155
156
vpImagePoint
cog;
157
cog = d.getCog();
158
159
vpPixelMeterConversion::convertPoint
(cam, cog, x, y);
160
161
s.set_x(x);
162
s.set_y(y);
163
}
164
catch
(...) {
165
vpERROR_TRACE
(
"Error caught"
);
166
throw
;
167
}
168
}
169
#endif
//#ifdef VISP_HAVE_MODULE_BLOB
170
213
void
vpFeatureBuilder::create
(
vpFeaturePoint
&s,
const
vpCameraParameters
&cam,
const
vpImagePoint
&ip)
214
{
215
try
{
216
double
x = 0, y = 0;
217
218
vpPixelMeterConversion::convertPoint
(cam, ip, x, y);
219
220
s.set_x(x);
221
s.set_y(y);
222
}
223
catch
(...) {
224
vpERROR_TRACE
(
"Error caught"
);
225
throw
;
226
}
227
}
228
243
void
vpFeatureBuilder::create
(
vpFeaturePoint
&s,
const
vpPoint
&p)
244
{
245
try
{
246
s.set_x(p.get_x());
247
s.set_y(p.get_y());
248
249
s.set_Z(p.cP[2] / p.cP[3]);
250
251
if
(s.get_Z() < 0) {
252
vpERROR_TRACE
(
"Point is behind the camera "
);
253
std::cout <<
"Z = "
<< s.get_Z() << std::endl;
254
255
throw
(
vpFeatureException
(
vpFeatureException::badInitializationError
,
"Point is behind the camera "
));
256
}
257
258
if
(fabs(s.get_Z()) < 1e-6) {
259
vpERROR_TRACE
(
"Point Z coordinates is null "
);
260
std::cout <<
"Z = "
<< s.get_Z() << std::endl;
261
262
throw
(
vpFeatureException
(
vpFeatureException::badInitializationError
,
"Point Z coordinates is null"
));
263
}
264
265
}
266
catch
(...) {
267
vpERROR_TRACE
(
"Error caught"
);
268
throw
;
269
}
270
}
271
303
void
vpFeatureBuilder::create
(
vpFeaturePoint
&s,
const
vpCameraParameters
&goodCam,
const
vpCameraParameters
&wrongCam,
304
const
vpPoint
&p)
305
{
306
try
{
307
double
x = p.p[0];
308
double
y = p.p[1];
309
310
s.set_Z(p.cP[2] / p.cP[3]);
311
312
double
u = 0, v = 0;
313
vpMeterPixelConversion::convertPoint
(goodCam, x, y, u, v);
314
vpPixelMeterConversion::convertPoint
(wrongCam, u, v, x, y);
315
316
s.set_x(x);
317
s.set_y(y);
318
}
319
catch
(...) {
320
vpERROR_TRACE
(
"Error caught"
);
321
throw
;
322
}
323
}
324
END_VISP_NAMESPACE
vpCameraParameters
Generic class defining intrinsic camera parameters.
Definition
vpCameraParameters.h:311
vpDot2
This tracker is meant to track a blob (connex pixels with same gray level) on a vpImage.
Definition
vpDot2.h:127
vpDot
This tracker is meant to track a dot (connected pixels with same gray level) on a vpImage.
Definition
vpDot.h:123
vpFeatureBuilder::create
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
Definition
vpFeatureBuilderPoint.cpp:90
vpFeatureException
Error that can be emitted by the vpBasicFeature class and its derivates.
Definition
vpFeatureException.h:55
vpFeatureException::badInitializationError
@ badInitializationError
Wrong feature initialization.
Definition
vpFeatureException.h:70
vpFeaturePoint
Class that defines a 2D point visual feature which is composed by two parameters that are the cartes...
Definition
vpFeaturePoint.h:190
vpImagePoint
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition
vpImagePoint.h:82
vpMeterPixelConversion::convertPoint
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
Definition
vpMeterPixelConversion.h:105
vpPixelMeterConversion::convertPoint
static void convertPoint(const vpCameraParameters &cam, const double &u, const double &v, double &x, double &y)
Definition
vpPixelMeterConversion.h:108
vpPoint
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Definition
vpPoint.h:79
vpERROR_TRACE
#define vpERROR_TRACE
Definition
vpDebug.h:423
BEGIN_VISP_NAMESPACE
Definition
vpMbtDistanceCircle.cpp:55
modules
visual_features
src
feature-builder
vpFeatureBuilderPoint.cpp
Generated by
1.17.0