48 #ifndef OPENCV_CALIB3D_UPNP_H_ 49 #define OPENCV_CALIB3D_UPNP_H_ 51 #include <mrpt/config.h> 52 #include <mrpt/otherlibs/do_opencv_includes.h> 80 upnp(
const cv::Mat& cameraMatrix,
const cv::Mat& opoints,
const cv::Mat& ipoints);
101 uc = cameraMatrix.at<T> (0, 2);
102 vc = cameraMatrix.at<T> (1, 2);
112 template <
typename Opo
intType,
typename Ipo
intType>
117 pws[3 * i ] = opoints.at<OpointType>(i).
x;
118 pws[3 * i + 1] = opoints.at<OpointType>(i).
y;
119 pws[3 * i + 2] = opoints.at<OpointType>(i).
z;
121 us[2 * i ] = ipoints.at<IpointType>(i).
x;
122 us[2 * i + 1] = ipoints.at<IpointType>(i).
y;
152 void fill_M(cv::Mat * M,
const int row,
const double *
alphas,
const double u,
const double v);
159 void compute_ccs(
const double * betas,
const double * ut);
195 void qr_solve(cv::Mat * A, cv::Mat *
b, cv::Mat * X);
224 double sign(
const double v);
232 double dot(
const double *
v1,
const double *
v2);
240 double dotXY(
const double *
v1,
const double *
v2);
248 double dotZ(
const double *
v1,
const double *
v2);
256 double dist2(
const double * p1,
const double * p2);
279 void gauss_newton(
const cv::Mat * L_6x12,
const cv::Mat * Rho,
double current_betas[4],
double * efs);
291 const double cb[4], cv::Mat * A, cv::Mat *
b,
double const f);
302 double R[3][3],
double t[3]);
318 void copy_R_and_t(
const double R_dst[3][3],
const double t_dst[3],
319 double R_src[3][3],
double t_src[3]);
328 std::vector<double>
us;
342 #endif // Check for OPENCV_LIB 343 #endif // OPENCV_CALIB3D_UPNP_H_ double compute_R_and_t(const double *ut, const double *betas, double R[3][3], double t[3])
Function to compute the pose.
void fill_M(cv::Mat *M, const int row, const double *alphas, const double u, const double v)
Function to compute Maucaulay matrix M.
void init_points(const cv::Mat &opoints, const cv::Mat &ipoints)
Iniialize Object points and image points from OpenCV Matrix.
void estimate_R_and_t(double R[3][3], double t[3])
Helper function to function compute_R_and_t()
void copy_R_and_t(const double R_dst[3][3], const double t_dst[3], double R_src[3][3], double t_src[3])
Function to copy the pose.
std::vector< double > pws
Focal length in y-direction.
double cws[4][3]
Number of 2d/3d correspondences.
void compute_pcs(void)
Compute object points based on control points.
void compute_ccs(const double *betas, const double *ut)
Compute the control points.
void compute_alphas()
Function to comput .
std::vector< double > pcs
int number_of_correspondences
Internal variable.
double dotXY(const double *v1, const double *v2)
Compute dot product in 2D with only x and y components.
void find_betas_and_focal_approx_1(cv::Mat *Ut, cv::Mat *Rho, double *betas, double *efs)
Function to approximately calculate betas and focal length.
double compute_pose(cv::Mat &R, cv::Mat &t)
Function to compute pose.
std::vector< double > alphas
Image points.
void qr_solve(cv::Mat *A, cv::Mat *b, cv::Mat *X)
Function to do a QR decomposition.
double dot(const double *v1, const double *v2)
Compute the dot product between two vectors.
double dotZ(const double *v1, const double *v2)
Compute the dot product using only z component.
upnp(const cv::Mat &cameraMatrix, const cv::Mat &opoints, const cv::Mat &ipoints)
Constructor for UPnP class.
void generate_all_possible_solutions_for_f_unk(const double betas[5], double solutions[18][3])
Get all possible solutions.
double dist2(const double *p1, const double *p2)
Compute the euclidean distance squared between two points in 3D.
cv::Mat compute_constraint_distance_3param_6eq_6unk_f_unk(const cv::Mat &M1, const cv::Mat &M2)
Internal function.
double sign(const double v)
Return the sign of the scalar.
void compute_A_and_b_gauss_newton(const double *l_6x12, const double *rho, const double cb[4], cv::Mat *A, cv::Mat *b, double const f)
Compute matrix A and vector b.
void init_camera_parameters(const cv::Mat &cameraMatrix)
Initialize camera variables using camera intrinsic matrix.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
std::vector< double > us
Object points.
GLenum GLenum GLvoid * row
void find_betas_and_focal_approx_2(cv::Mat *Ut, cv::Mat *Rho, double *betas, double *efs)
Function to calculate betas and focal length (more accurate)
int max_nr
Control point variables.
double vc
Image center in x-direction.
~upnp()
Destructor for UPnP class.
GLfloat GLfloat GLfloat v2
cv::Mat compute_constraint_distance_2param_6eq_2unk_f_unk(const cv::Mat &M1)
Internal function.
void compute_rho(double *rho)
Internal fucntion.
void compute_L_6x12(const double *ut, double *l_6x12)
Internal function.
double reprojection_error(const double R[3][3], const double t[3])
Compute the reprojection error using the estimated Rotation matrix and Translation Vector...
void choose_control_points()
Function to select 4 control points.
void solve_for_sign(void)
Internal member function.
double * A1
Internal variable.
double fu
Image center in y-direction.
void gauss_newton(const cv::Mat *L_6x12, const cv::Mat *Rho, double current_betas[4], double *efs)
Gauss Newton Iterative optimization.
double fv
Focal length in x-direction.