14 #include <Eigen/Dense>    21     const Eigen::MatrixXd& obj_pts, 
const Eigen::MatrixXd& img_pts,
    22     const Eigen::MatrixXd& cam_intrinsic)
    30     Eigen::Matrix3d& 
R, Eigen::Vector3d& t, 
int n)
    34     Eigen::MatrixXd I = Eigen::MatrixXd::Identity(n, n), 
A(n, n), Y(n, 3),
    35                     E(n, 3), E_old(n, 3), U, V,
    36                     I3 = Eigen::MatrixXd::Identity(3, 3), PR,
    37                     Z = Eigen::MatrixXd::Zero(n, n);
    38     Eigen::VectorXd e(n), II(n), c(3), Zmindiag(n);
    41     II.fill(1.0 / ((
double)n));
    43     A = I - e * e.transpose() / n;
    45     double err = std::numeric_limits<double>::infinity();
    53         Eigen::JacobiSVD<Eigen::MatrixXd> svd(
    54             P.transpose() * Z * 
A * S,
    55             Eigen::ComputeThinU | Eigen::ComputeThinV);
    59         I3(2, 2) = (U * V.transpose()).determinant();
    60         R = U * I3 * V.transpose();
    63         c = (S - Z * PR).transpose() * II;
    65         Y = S - e * c.transpose();
    67         Zmindiag = ((PR * Y.transpose()).diagonal()).array() /
    68                    ((P.array() * P.array()).rowwise().sum()).array();
    70         for (
int i = 0; i < n; i++)
    71             if (Zmindiag(i) < 0) Zmindiag(i) = 0;
    73         Z = Zmindiag.asDiagonal();
    77         err = (E - E_old).
norm();
 
Eigen::MatrixXd S
Image points in pixels. 
 
ppnp(const Eigen::MatrixXd &obj_pts, const Eigen::MatrixXd &img_pts, const Eigen::MatrixXd &cam_intrinsic)
Constructor for the P-PnP class. 
 
bool compute_pose(Eigen::Matrix3d &R, Eigen::Vector3d &t, int n)
Function to compute pose. 
 
Eigen::MatrixXd C
Object points in Camera Co-ordinate system. 
 
CONTAINER::Scalar norm(const CONTAINER &v)