From 58cf500d5279aaabc98d8ded45e7e6fdd82e98e5 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Fri, 29 Apr 2022 11:08:53 +0200 Subject: [PATCH 1/4] Use ceres::Manifolds instead of ceres::LocalParameterization. The latter is deprecated. --- .../libmv/simple_pipeline/bundle.cc | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc index 1a1568da831..bb0a0996acf 100644 --- a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc +++ b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc @@ -24,6 +24,7 @@ #include "ceres/ceres.h" #include "ceres/rotation.h" +#include "ceres/version.h" #include "libmv/base/vector.h" #include "libmv/logging/logging.h" #include "libmv/multiview/fundamental.h" @@ -485,7 +486,11 @@ void EuclideanBundleCommonIntrinsics( PackCamerasRotationAndTranslation(tracks, *reconstruction); // Parameterization used to restrict camera motion for modal solvers. +#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 + ceres::SubsetManifold *constant_translation_manifold = NULL; +#else ceres::SubsetParameterization *constant_translation_parameterization = NULL; +#endif if (bundle_constraints & BUNDLE_NO_TRANSLATION) { std::vector constant_translation; @@ -494,8 +499,13 @@ void EuclideanBundleCommonIntrinsics( constant_translation.push_back(4); constant_translation.push_back(5); +#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 + constant_translation_parameterization = + new ceres::SubsetManifold(6, constant_translation); +#else constant_translation_parameterization = new ceres::SubsetParameterization(6, constant_translation); +#endif } // Add residual blocks to the problem. @@ -538,8 +548,13 @@ void EuclideanBundleCommonIntrinsics( } if (bundle_constraints & BUNDLE_NO_TRANSLATION) { +#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 + problem.SetParameterization(current_camera_R_t, + constant_translation_manifold); +#else problem.SetParameterization(current_camera_R_t, constant_translation_parameterization); +#endif } zero_weight_tracks_flags[marker.track] = false; @@ -586,10 +601,17 @@ void EuclideanBundleCommonIntrinsics( // Always set K3 constant, it's not used at the moment. constant_intrinsics.push_back(OFFSET_K3); +#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 + ceres::SubsetManifold *subset_manifold = + new ceres::SubsetManifold(OFFSET_MAX, constant_intrinsics); + + problem.SetManifold(ceres_intrinsics, subset_manifold); +#else ceres::SubsetParameterization *subset_parameterization = new ceres::SubsetParameterization(OFFSET_MAX, constant_intrinsics); problem.SetParameterization(ceres_intrinsics, subset_parameterization); +#endif } // Configure the solver. From 880c12bc9ae9d215257f7f0133c4c21ebe25c544 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Tue, 24 May 2022 14:54:48 +0200 Subject: [PATCH 2/4] Fix typo. --- modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc index bb0a0996acf..02257bf1aa1 100644 --- a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc +++ b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc @@ -500,7 +500,7 @@ void EuclideanBundleCommonIntrinsics( constant_translation.push_back(5); #if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 - constant_translation_parameterization = + constant_translation_manifold = new ceres::SubsetManifold(6, constant_translation); #else constant_translation_parameterization = From d55b9bce417f7e3d0c9ebcff6072b4ff3cc80d18 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Wed, 25 May 2022 15:15:22 +0200 Subject: [PATCH 3/4] Fix version check. --- modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc index 02257bf1aa1..05768f40dab 100644 --- a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc +++ b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc @@ -486,7 +486,7 @@ void EuclideanBundleCommonIntrinsics( PackCamerasRotationAndTranslation(tracks, *reconstruction); // Parameterization used to restrict camera motion for modal solvers. -#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 +#if CERES_VERSION_MAJOR >= 3 || (CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1) ceres::SubsetManifold *constant_translation_manifold = NULL; #else ceres::SubsetParameterization *constant_translation_parameterization = NULL; @@ -499,7 +499,7 @@ void EuclideanBundleCommonIntrinsics( constant_translation.push_back(4); constant_translation.push_back(5); -#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 +#if CERES_VERSION_MAJOR >= 3 || (CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1) constant_translation_manifold = new ceres::SubsetManifold(6, constant_translation); #else From 9ca28c3e915f3c32a166e5d89758f3f09b54fb36 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Sat, 28 May 2022 21:46:37 +0200 Subject: [PATCH 4/4] And more version fixes. --- modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc index 05768f40dab..1d19978937b 100644 --- a/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc +++ b/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc @@ -548,7 +548,7 @@ void EuclideanBundleCommonIntrinsics( } if (bundle_constraints & BUNDLE_NO_TRANSLATION) { -#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 +#if CERES_VERSION_MAJOR >= 3 || (CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1) problem.SetParameterization(current_camera_R_t, constant_translation_manifold); #else @@ -601,7 +601,7 @@ void EuclideanBundleCommonIntrinsics( // Always set K3 constant, it's not used at the moment. constant_intrinsics.push_back(OFFSET_K3); -#if CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1 +#if CERES_VERSION_MAJOR >= 3 || (CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1) ceres::SubsetManifold *subset_manifold = new ceres::SubsetManifold(OFFSET_MAX, constant_intrinsics);