MRPT  2.0.0
List of all members | Public Member Functions
mrpt::vision::pnp::CPnP Class Reference

Detailed Description

This class is used for Pose estimation from a known landmark using a monocular camera.

The toolkit comprises of state of the art PnP (Perspective n Point) algorithms

The Python Bindings pnp_perf_comp.py can be used to generate performance comparison using standard tests between the different algorithms.

Performance comparison Results

Author
Chandra Mangipudi
Date
17/08/16

Definition at line 50 of file pnp_algos.h.

#include <mrpt/vision/pnp_algos.h>

Public Member Functions

bool dls (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [4] Direct Least Squares (DLS) - PnP : Algorithm formulates position as a function of rotation. More...
 
bool epnp (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [9] Efficient-PnP (EPnP) - Algorithm takes 4 control points based on n points and uses the control points to compute the pose More...
 
bool upnp (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [6] Unified-PnP (UPnP) : Algorithm to compute pose from unknown camera intrinsic matrix More...
 
bool p3p (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [5] P3P - A closed form solution for n=3, 2D-3D correspondences More...
 
bool rpnp (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [7] Robust (R-PnP)- A closed form solution with intermediate P3P computations More...
 
bool ppnp (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [3] Procrustes-PnP(PPnP) Algorithm : Iterative SVD based algorithm More...
 
bool posit (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [2] Pose from Orthogoanlity and Scaling :Iterative (POSIT) - A Geometric algorithm to compute scale and orthogonality independently More...
 
bool lhm (const Eigen::Ref< Eigen::MatrixXd > obj_pts, const Eigen::Ref< Eigen::MatrixXd > img_pts, int n, const Eigen::Ref< Eigen::MatrixXd > cam_intrinsic, Eigen::Ref< Eigen::MatrixXd > pose_mat)
 [8] Lu-Hager-Mjolsness(LHM)-PnP algorithm : Iterative algorithm to reduce object space error More...
 

Member Function Documentation

◆ dls()

bool mrpt::vision::pnp::CPnP::dls ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[4] Direct Least Squares (DLS) - PnP : Algorithm formulates position as a function of rotation.

Use Cayley's rotation theorem to represent the rotation using parameters ($s_1, s_2, s_3$). Solve the rotation using multi-variate polynomial expressions

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 (only 4 points used) array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 (only 4 points used) array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 35 of file pnp_algos.cpp.

References mrpt::vision::pnp::dls::compute_pose().

Here is the call graph for this function:

◆ epnp()

bool mrpt::vision::pnp::CPnP::epnp ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[9] Efficient-PnP (EPnP) - Algorithm takes 4 control points based on n points and uses the control points to compute the pose

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 (only 4 points used) array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 (only 4 points used) array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 118 of file pnp_algos.cpp.

References mrpt::vision::pnp::epnp::compute_pose().

Here is the call graph for this function:

◆ lhm()

bool mrpt::vision::pnp::CPnP::lhm ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[8] Lu-Hager-Mjolsness(LHM)-PnP algorithm : Iterative algorithm to reduce object space error

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 array [p_x p_y p_z]
[in]img_ptsImage points in pixels nX3 array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 541 of file pnp_algos.cpp.

References mrpt::vision::pnp::lhm::compute_pose(), and R.

Here is the call graph for this function:

◆ p3p()

bool mrpt::vision::pnp::CPnP::p3p ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[5] P3P - A closed form solution for n=3, 2D-3D correspondences

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 (only 4 points used) array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 (only 4 points used) array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 283 of file pnp_algos.cpp.

References R, and mrpt::vision::pnp::p3p::solve().

Here is the call graph for this function:

◆ posit()

bool mrpt::vision::pnp::CPnP::posit ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[2] Pose from Orthogoanlity and Scaling :Iterative (POSIT) - A Geometric algorithm to compute scale and orthogonality independently

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 476 of file pnp_algos.cpp.

References mrpt::vision::pnp::posit::compute_pose(), and R.

Here is the call graph for this function:

◆ ppnp()

bool mrpt::vision::pnp::CPnP::ppnp ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[3] Procrustes-PnP(PPnP) Algorithm : Iterative SVD based algorithm

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 411 of file pnp_algos.cpp.

References mrpt::vision::pnp::ppnp::compute_pose(), and R.

Here is the call graph for this function:

◆ rpnp()

bool mrpt::vision::pnp::CPnP::rpnp ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[7] Robust (R-PnP)- A closed form solution with intermediate P3P computations

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 (only 4 points used) array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 (only 4 points used) array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 347 of file pnp_algos.cpp.

References mrpt::vision::pnp::rpnp::compute_pose(), and R.

Here is the call graph for this function:

◆ upnp()

bool mrpt::vision::pnp::CPnP::upnp ( const Eigen::Ref< Eigen::MatrixXd >  obj_pts,
const Eigen::Ref< Eigen::MatrixXd >  img_pts,
int  n,
const Eigen::Ref< Eigen::MatrixXd >  cam_intrinsic,
Eigen::Ref< Eigen::MatrixXd >  pose_mat 
)

[6] Unified-PnP (UPnP) : Algorithm to compute pose from unknown camera intrinsic matrix

Parameters
[in]obj_ptsObject points in Camera Co-ordinate system {C} nX3 (only 4 points used) array [p_x, p_y, p_z]
[in]img_ptsImage points in pixels nX3 (only 4 points used) array containing pixel data from camera [u, v, 1]
[in]nnumber of 2D-3D correspondences
[in]cam_intrinsicCamera Intrinsic matrix
[out]pose_matOutput pose vector 6X1, pose_mat[0:2]-> Translation, pose_mat[3:5] -> Quaternion vector component
Returns
success flag

Definition at line 201 of file pnp_algos.cpp.

References mrpt::vision::pnp::upnp::compute_pose().

Here is the call graph for this function:



Page generated by Doxygen 1.8.14 for MRPT 2.0.0 Git: b38439d21 Tue Mar 31 19:58:06 2020 +0200 at miƩ abr 1 00:50:30 CEST 2020