diff options
Diffstat (limited to 'extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc')
-rw-r--r-- | extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc b/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc index 246828a644f..14030da6315 100644 --- a/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc +++ b/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc @@ -68,20 +68,8 @@ bool EuclideanReconstructTwoFrames(const vector<Marker> &markers, NormalizedEightPointSolver(x1, x2, &F); // The F matrix should be an E matrix, but squash it just to be sure. - Eigen::JacobiSVD<Mat3> svd(F, Eigen::ComputeFullU | Eigen::ComputeFullV); - - // See Hartley & Zisserman page 294, result 11.1, which shows how to get the - // closest essential matrix to a matrix that is "almost" an essential matrix. - double a = svd.singularValues()(0); - double b = svd.singularValues()(1); - double s = (a + b) / 2.0; - LG << "Initial reconstruction's rotation is non-euclidean by " - << (((a - b) / std::max(a, b)) * 100) << "%; singular values:" - << svd.singularValues().transpose(); - - Vec3 diag; - diag << s, s, 0; - Mat3 E = svd.matrixU() * diag.asDiagonal() * svd.matrixV().transpose(); + Mat3 E; + FundamentalToEssential(F, &E); // Recover motion between the two images. Since this function assumes a // calibrated camera, use the identity for K. |