13 #include <Eigen/Dense> 
   19         Eigen::MatrixXd obj_pts_, Eigen::MatrixXd img_pts_,
 
   20         Eigen::MatrixXd camera_intrinsic_, 
int n0)
 
   23         img_pts = img_pts_.block(0, 0, n0, 2);
 
   25         R = Eigen::MatrixXd::Identity(3, 3);
 
   26         t = Eigen::VectorXd::Zero(3);
 
   34         obj_vecs = Eigen::MatrixXd::Zero(n0, 3);
 
   36         for (
int i = 0; i < 
n; i++)
 
   39         img_vecs = Eigen::MatrixXd::Zero(n0, 2);
 
   47         Eigen::Vector3d I0, J0, r1, r2, r3;
 
   48         double I0_norm, J0_norm;
 
   53         for (i = 0; i < 3; i++)
 
   55                 I0(i) = obj_matrix.row(i).dot(img_vecs.col(0));
 
   56                 J0(i) = obj_matrix.row(i).dot(img_vecs.col(1));
 
   62         scale = (I0_norm + J0_norm) / 2;
 
   65         t(0) = img_pts(0, 0) / 
scale;
 
   66         t(1) = img_pts(0, 1) / 
scale;
 
   85         Eigen::Ref<Eigen::Matrix3d> R_, Eigen::Ref<Eigen::Vector3d> t_)
 
   87         Eigen::FullPivLU<Eigen::MatrixXd> lu(obj_pts);
 
   88         if (lu.rank() < 3) 
return false;
 
   91         long imageDiff = 1000;
 
   97                         for (i = 0; i < img_vecs.rows(); i++)
 
   98                                 img_vecs.row(i) = img_pts.row(i) - img_pts.row(0);
 
  105                         for (i = 0; i < 
n; i++)
 
  107                                 epsilons(i) += obj_vecs.row(i).dot(
R.row(2));
 
  112                         for (i = 0; i < 
n; i++)
 
  115                                         img_pts.row(i) * (1 + epsilons(i)) - img_pts.row(0);
 
  118                         imageDiff = this->get_img_diff();
 
  121                 img_vecs_old = img_vecs;
 
  125                 if (iCount > 0 && imageDiff == 0) 
break;
 
  129                         std::cout << 
"Solution Not converged" << std::endl << std::endl;
 
  144         for (i = 0; i < 
n; i++)
 
  146                 for (j = 0; j < 2; j++)
 
  148                         sumOfDiffs += std::abs(
 
  149                                 floor(0.5 + img_vecs(i, j)) - floor(0.5 + img_vecs_old(i, j)));