Skip to content

Commit

Permalink
Merge pull request opencv#3243 from vrabaud:3.4_ceres
Browse files Browse the repository at this point in the history
* Use ceres::Manifolds instead of ceres::LocalParameterization.

The latter is deprecated.

* Fix typo.

* Fix version check.

* And more version fixes.
  • Loading branch information
vrabaud authored and hakaboom committed Jul 1, 2022
1 parent 6d54275 commit e2d8d4e
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -485,7 +486,11 @@ void EuclideanBundleCommonIntrinsics(
PackCamerasRotationAndTranslation(tracks, *reconstruction);

// Parameterization used to restrict camera motion for modal solvers.
#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;
#endif
if (bundle_constraints & BUNDLE_NO_TRANSLATION) {
std::vector<int> constant_translation;

Expand All @@ -494,8 +499,13 @@ void EuclideanBundleCommonIntrinsics(
constant_translation.push_back(4);
constant_translation.push_back(5);

#if CERES_VERSION_MAJOR >= 3 || (CERES_VERSION_MAJOR >= 2 && CERES_VERSION_MINOR >= 1)
constant_translation_manifold =
new ceres::SubsetManifold(6, constant_translation);
#else
constant_translation_parameterization =
new ceres::SubsetParameterization(6, constant_translation);
#endif
}

// Add residual blocks to the problem.
Expand Down Expand Up @@ -538,8 +548,13 @@ void EuclideanBundleCommonIntrinsics(
}

if (bundle_constraints & BUNDLE_NO_TRANSLATION) {
#if CERES_VERSION_MAJOR >= 3 || (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;
Expand Down Expand Up @@ -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 >= 3 || (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.
Expand Down

0 comments on commit e2d8d4e

Please sign in to comment.