71 double n02_p,
double &xc_m,
double &yc_m,
double &n20_m,
double &n11_m,
double &n02_m);
72 static void convertLine(
const vpCameraParameters &cam,
const double &rho_p,
const double &theta_p,
double &rho_m,
104 switch (cam.projModel) {
106 convertPointWithoutDistortion(cam, u, v, x, y);
109 convertPointWithDistortion(cam, u, v, x, y);
112 convertPointWithKannalaBrandtDistortion(cam, u, v, x, y);
146 switch (cam.projModel) {
148 convertPointWithoutDistortion(cam, iP, x, y);
151 convertPointWithDistortion(cam, iP, x, y);
154 convertPointWithKannalaBrandtDistortion(cam, iP, x, y);
159#ifndef DOXYGEN_SHOULD_SKIP_THIS
172 inline static void convertPointWithoutDistortion(
const vpCameraParameters &cam,
const double &u,
const double &v,
173 double &x,
double &y)
175 x = (u - cam.u0) * cam.inv_px;
176 y = (v - cam.v0) * cam.inv_py;
197 x = (iP.
get_u() - cam.u0) * cam.inv_px;
198 y = (iP.
get_v() - cam.v0) * cam.inv_py;
215 inline static void convertPointWithDistortion(
const vpCameraParameters &cam,
const double &u,
const double &v,
216 double &x,
double &y)
218 double r2 = 1. + cam.kdu * (
vpMath::sqr((u - cam.u0) * cam.inv_px) +
vpMath::sqr((v - cam.v0) * cam.inv_py));
219 x = (u - cam.u0) * r2 * cam.inv_px;
220 y = (v - cam.v0) * r2 * cam.inv_py;
242 double r2 = 1. + cam.kdu * (
vpMath::sqr((iP.
get_u() - cam.u0) * cam.inv_px) +
244 x = (iP.
get_u() - cam.u0) * r2 * cam.inv_px;
245 y = (iP.
get_v() - cam.v0) * r2 * cam.inv_py;
268 inline static void convertPointWithKannalaBrandtDistortion(
const vpCameraParameters &cam,
const double &u,
269 const double &v,
double &x,
double &y)
271 double x_d = (u - cam.u0) / cam.px, y_d = (v - cam.v0) / cam.py;
275 r_d = std::min(std::max(-M_PI, r_d), M_PI);
279 const double EPS = 1e-8;
285 for (
int j = 0; j < 10; j++) {
286 double theta2 = theta * theta, theta4 = theta2 * theta2, theta6 = theta4 * theta2, theta8 = theta6 * theta2;
287 double k0_theta2 = k[0] * theta2, k1_theta4 = k[1] * theta4, k2_theta6 = k[2] * theta6,
288 k3_theta8 = k[3] * theta8;
290 double theta_fix = (theta * (1 + k0_theta2 + k1_theta4 + k2_theta6 + k3_theta8) - r_d) /
291 (1 + 3 * k0_theta2 + 5 * k1_theta4 + 7 * k2_theta6 + 9 * k3_theta8);
292 theta = theta - theta_fix;
293 if (fabs(theta_fix) < EPS)
297 scale = std::tan(theta) / r_d;
324 double &x,
double &y)
326 double x_d = (iP.
get_u() - cam.u0) / cam.px, y_d = (iP.
get_v() - cam.v0) / cam.py;
330 r_d = std::min(std::max(-M_PI, r_d), M_PI);
334 const double EPS = 1e-8;
340 for (
int j = 0; j < 10; j++) {
341 double theta2 = theta * theta, theta4 = theta2 * theta2, theta6 = theta4 * theta2, theta8 = theta6 * theta2;
342 double k0_theta2 = k[0] * theta2, k1_theta4 = k[1] * theta4, k2_theta6 = k[2] * theta6,
343 k3_theta8 = k[3] * theta8;
345 double theta_fix = (theta * (1 + k0_theta2 + k1_theta4 + k2_theta6 + k3_theta8) - r_d) /
346 (1 + 3 * k0_theta2 + 5 * k1_theta4 + 7 * k2_theta6 + 9 * k3_theta8);
347 theta = theta - theta_fix;
348 if (fabs(theta_fix) < EPS)
352 scale = std::tan(theta) / r_d;
361#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC)
364 static void convertEllipse(
const cv::Mat &cameraMatrix,
const cv::Mat &distCoeffs,
const vpImagePoint ¢er_p,
365 double n20_p,
double n11_p,
double n02_p,
double &xc_m,
double &yc_m,
double &n20_m,
366 double &n11_m,
double &n02_m);
367 static void convertLine(
const cv::Mat &cameraMatrix,
const double &rho_p,
const double &theta_p,
double &rho_m,
369 static void convertMoment(
const cv::Mat &cameraMatrix,
unsigned int order,
const vpMatrix &moment_pixel,
371 static void convertPoint(
const cv::Mat &cameraMatrix,
const cv::Mat &distCoeffs,
const double &u,
const double &v,
372 double &x,
double &y);
373 static void convertPoint(
const cv::Mat &cameraMatrix,
const cv::Mat &distCoeffs,
const vpImagePoint &iP,
double &x,