29 typedef Eigen::Vector2d
X_t;
31 typedef Eigen::Vector3d
Y_t;
45 static std::vector<M_t>
Estimate(
const std::vector<X_t>& points2D,
46 const std::vector<Y_t>& points3D);
55 static void Residuals(
const std::vector<X_t>& points2D,
56 const std::vector<Y_t>& points3D,
57 const M_t& proj_matrix,
58 std::vector<double>* residuals);
75 typedef Eigen::Vector2d
X_t;
77 typedef Eigen::Vector3d
Y_t;
91 static std::vector<M_t>
Estimate(
const std::vector<X_t>& points2D,
92 const std::vector<Y_t>& points3D);
101 static void Residuals(
const std::vector<X_t>& points2D,
102 const std::vector<Y_t>& points3D,
103 const M_t& proj_matrix,
104 std::vector<double>* residuals);
107 bool ComputePose(
const std::vector<Eigen::Vector2d>& points2D,
108 const std::vector<Eigen::Vector3d>& points3D,
111 void ChooseControlPoints();
112 bool ComputeBarycentricCoordinates();
114 Eigen::Matrix<double, Eigen::Dynamic, 12> ComputeM();
115 Eigen::Matrix<double, 6, 10> ComputeL6x10(
116 const Eigen::Matrix<double, 12, 12>& Ut);
117 Eigen::Matrix<double, 6, 1> ComputeRho();
119 void FindBetasApprox1(
const Eigen::Matrix<double, 6, 10>& L_6x10,
120 const Eigen::Matrix<double, 6, 1>& rho,
121 Eigen::Vector4d* betas);
122 void FindBetasApprox2(
const Eigen::Matrix<double, 6, 10>& L_6x10,
123 const Eigen::Matrix<double, 6, 1>& rho,
124 Eigen::Vector4d* betas);
125 void FindBetasApprox3(
const Eigen::Matrix<double, 6, 10>& L_6x10,
126 const Eigen::Matrix<double, 6, 1>& rho,
127 Eigen::Vector4d* betas);
129 void RunGaussNewton(
const Eigen::Matrix<double, 6, 10>& L_6x10,
130 const Eigen::Matrix<double, 6, 1>& rho,
131 Eigen::Vector4d* betas);
133 double ComputeRT(
const Eigen::Matrix<double, 12, 12>& Ut,
134 const Eigen::Vector4d& betas,
138 void ComputeCcs(
const Eigen::Vector4d& betas,
139 const Eigen::Matrix<double, 12, 12>& Ut);
144 void EstimateRT(Eigen::Matrix3d* R, Eigen::Vector3d* t);
146 double ComputeTotalReprojectionError(
const Eigen::Matrix3d& R,
147 const Eigen::Vector3d& t);
149 const std::vector<Eigen::Vector2d>* points2D_ =
nullptr;
150 const std::vector<Eigen::Vector3d>* points3D_ =
nullptr;
151 std::vector<Eigen::Vector3d> pcs_;
152 std::vector<Eigen::Vector4d> alphas_;
153 std::array<Eigen::Vector3d, 4> cws_;
154 std::array<Eigen::Vector3d, 4> ccs_;
static void Residuals(const std::vector< X_t > &points2D, const std::vector< Y_t > &points3D, const M_t &proj_matrix, std::vector< double > *residuals)
static const int kMinNumSamples
static std::vector< M_t > Estimate(const std::vector< X_t > &points2D, const std::vector< Y_t > &points3D)
static std::vector< M_t > Estimate(const std::vector< X_t > &points2D, const std::vector< Y_t > &points3D)
static void Residuals(const std::vector< X_t > &points2D, const std::vector< Y_t > &points3D, const M_t &proj_matrix, std::vector< double > *residuals)
static const int kMinNumSamples
Matrix< double, 3, 4 > Matrix3x4d