40 #ifndef vpMeterPixelConversion_H 41 #define vpMeterPixelConversion_H 49 #include <visp3/core/vpCameraParameters.h> 50 #include <visp3/core/vpCircle.h> 51 #include <visp3/core/vpSphere.h> 52 #include <visp3/core/vpException.h> 53 #include <visp3/core/vpImagePoint.h> 54 #include <visp3/core/vpMath.h> 56 #if VISP_HAVE_OPENCV_VERSION >= 0x020300 57 # include <opencv2/calib3d/calib3d.hpp> 78 double &n20_p,
double &n11_p,
double &n02_p);
80 double &n20_p,
double &n11_p,
double &n02_p);
82 double xc_m,
double yc_m,
double n20_m,
double n11_m,
double n02_m,
83 vpImagePoint ¢er_p,
double &n20_p,
double &n11_p,
double &n02_p);
84 static void convertLine(
const vpCameraParameters &cam,
const double &rho_m,
const double &theta_m,
double &rho_p,
113 const double &x,
const double &y,
double &u,
double &v)
115 switch (cam.projModel) {
117 convertPointWithoutDistortion(cam, x, y, u, v);
120 convertPointWithDistortion(cam, x, y, u, v);
123 convertPointWithKannalaBrandtDistortion(cam, x, y, u, v);
157 switch (cam.projModel) {
159 convertPointWithoutDistortion(cam, x, y, iP);
162 convertPointWithDistortion(cam, x, y, iP);
165 convertPointWithKannalaBrandtDistortion(cam, x, y, iP);
170 #ifndef DOXYGEN_SHOULD_SKIP_THIS 180 inline static void convertPointWithoutDistortion(
const vpCameraParameters &cam,
const double &x,
const double &y,
181 double &u,
double &v)
183 u = x * cam.px + cam.u0;
184 v = y * cam.py + cam.v0;
197 inline static void convertPointWithoutDistortion(
const vpCameraParameters &cam,
const double &x,
const double &y,
200 iP.
set_u(x * cam.px + cam.u0);
201 iP.
set_v(y * cam.py + cam.v0);
220 inline static void convertPointWithDistortion(
const vpCameraParameters &cam,
const double &x,
const double &y,
221 double &u,
double &v)
223 double r2 = 1. + cam.kud * (x * x + y * y);
224 u = cam.u0 + cam.px * x * r2;
225 v = cam.v0 + cam.py * y * r2;
244 inline static void convertPointWithDistortion(
const vpCameraParameters &cam,
const double &x,
const double &y,
247 double r2 = 1. + cam.kud * (x * x + y * y);
248 iP.
set_u(cam.u0 + cam.px * x * r2);
249 iP.
set_v(cam.v0 + cam.py * y * r2);
274 inline static void convertPointWithKannalaBrandtDistortion(
const vpCameraParameters &cam,
const double &x,
const double &y,
275 double &u,
double &v)
278 double theta = atan(r);
282 double theta2 = theta*theta, theta3 = theta2*theta, theta4 = theta2*theta2, theta5 = theta4*theta,
283 theta6 = theta3*theta3, theta7 = theta6*theta, theta8 = theta4*theta4, theta9 = theta8*theta;
285 double r_d = theta + k[0]*theta3 + k[1]*theta5 + k[2]*theta7 + k[3]*theta9;
287 double scale = (std::fabs(r) < std::numeric_limits<double>::epsilon()) ? 1.0 : r_d / r;
289 double x_d = x * scale;
290 double y_d = y * scale;
292 u = cam.px * x_d + cam.u0;
293 v = cam.py * y_d + cam.v0;
317 inline static void convertPointWithKannalaBrandtDistortion(
const vpCameraParameters &cam,
const double &x,
const double &y,
321 double theta = atan(r);
325 double theta2 = theta*theta, theta3 = theta2*theta, theta4 = theta2*theta2, theta5 = theta4*theta,
326 theta6 = theta3*theta3, theta7 = theta6*theta, theta8 = theta4*theta4, theta9 = theta8*theta;
328 double r_d = theta + k[0]*theta3 + k[1]*theta5 + k[2]*theta7 + k[3]*theta9;
330 double scale = (std::fabs(r) < std::numeric_limits<double>::epsilon()) ? 1.0 : r_d / r;
332 double x_d = x * scale;
333 double y_d = y * scale;
335 iP.
set_u(cam.px * x_d + cam.u0);
336 iP.
set_v(cam.py * y_d + cam.v0);
339 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS 342 #if VISP_HAVE_OPENCV_VERSION >= 0x020300 345 static void convertEllipse(
const cv::Mat &cameraMatrix,
347 double &n20_p,
double &n11_p,
double &n02_p);
348 static void convertEllipse(
const cv::Mat &cameraMatrix,
350 double &n20_p,
double &n11_p,
double &n02_p);
351 static void convertEllipse(
const cv::Mat &cameraMatrix,
352 double xc_m,
double yc_m,
double n20_m,
double n11_m,
double n02_m,
353 vpImagePoint ¢er_p,
double &n20_p,
double &n11_p,
double &n02_p);
354 static void convertLine(
const cv::Mat &cameraMatrix,
355 const double &rho_m,
const double &theta_m,
356 double &rho_p,
double &theta_p);
357 static void convertPoint(
const cv::Mat &cameraMatrix,
const cv::Mat &distCoeffs,
358 const double &x,
const double &y,
double &u,
double &v);
359 static void convertPoint(
const cv::Mat &cameraMatrix,
const cv::Mat &distCoeffs,
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, vpImagePoint &iP)
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
Class that defines a 3D sphere in the object frame and allows forward projection of a 3D sphere in th...
static double sqr(double x)
Generic class defining intrinsic camera parameters.
std::vector< double > getKannalaBrandtDistortionCoefficients() const
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Class that defines a 3D circle in the object frame and allows forward projection of a 3D circle in th...