From 447c428a124443c89783d7061f355cc5bd064cc4 Mon Sep 17 00:00:00 2001 From: Linfei Pan Date: Tue, 4 Mar 2025 00:38:56 +0100 Subject: [PATCH 1/3] add more options in CLI and add support to optimize principal point --- glomap/controllers/option_manager.cc | 6 ++++++ glomap/estimators/bundle_adjustment.cc | 6 +++--- glomap/estimators/bundle_adjustment.h | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/glomap/controllers/option_manager.cc b/glomap/controllers/option_manager.cc index d1e0304..1f00bea 100644 --- a/glomap/controllers/option_manager.cc +++ b/glomap/controllers/option_manager.cc @@ -234,6 +234,12 @@ void OptionManager::AddInlierThresholdOptions() { return; } added_inliers_options_ = true; + AddAndRegisterDefaultOption("Thresholds.max_angle_error", + &mapper->inlier_thresholds.max_angle_error); + AddAndRegisterDefaultOption("Thresholds.max_reprojection_error", + &mapper->inlier_thresholds.max_reprojection_error); + AddAndRegisterDefaultOption("Thresholds.min_triangulation_angle", + &mapper->inlier_thresholds.min_triangulation_angle); AddAndRegisterDefaultOption("Thresholds.max_epipolar_error_E", &mapper->inlier_thresholds.max_epipolar_error_E); AddAndRegisterDefaultOption("Thresholds.max_epipolar_error_F", diff --git a/glomap/estimators/bundle_adjustment.cc b/glomap/estimators/bundle_adjustment.cc index ee2be7a..3bc83d0 100644 --- a/glomap/estimators/bundle_adjustment.cc +++ b/glomap/estimators/bundle_adjustment.cc @@ -161,7 +161,7 @@ void BundleAdjuster::ParameterizeVariables( images[center].cam_from_world.translation.data()); // Parameterize the camera parameters, or set them to be constant if desired - if (options_.optimize_intrinsics) { + if (options_.optimize_intrinsics && !options_.optimize_principal_point) { for (auto& [camera_id, camera] : cameras) { if (problem_->HasParameterBlock(camera.params.data())) { std::vector principal_point_idxs; @@ -174,8 +174,8 @@ void BundleAdjuster::ParameterizeVariables( camera.params.data()); } } - - } else { + } else if (!options_.optimize_intrinsics && + !options_.optimize_principal_point) { for (auto& [camera_id, camera] : cameras) { if (problem_->HasParameterBlock(camera.params.data())) { problem_->SetParameterBlockConstant(camera.params.data()); diff --git a/glomap/estimators/bundle_adjustment.h b/glomap/estimators/bundle_adjustment.h index 76a81b9..e9b6390 100644 --- a/glomap/estimators/bundle_adjustment.h +++ b/glomap/estimators/bundle_adjustment.h @@ -14,6 +14,7 @@ struct BundleAdjusterOptions : public OptimizationBaseOptions { bool optimize_rotations = true; bool optimize_translation = true; bool optimize_intrinsics = true; + bool optimize_principal_point = true; bool optimize_points = true; // Constrain the minimum number of views per track From be46309c15f86d14c2cf553cd30e54edfafa0ca1 Mon Sep 17 00:00:00 2001 From: Linfei Pan Date: Tue, 4 Mar 2025 00:42:31 +0100 Subject: [PATCH 2/3] d --- glomap/controllers/option_manager.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/glomap/controllers/option_manager.cc b/glomap/controllers/option_manager.cc index 1f00bea..9b8fb6a 100644 --- a/glomap/controllers/option_manager.cc +++ b/glomap/controllers/option_manager.cc @@ -205,6 +205,8 @@ void OptionManager::AddBundleAdjusterOptions() { &mapper->opt_ba.optimize_translation); AddAndRegisterDefaultOption("BundleAdjustment.optimize_intrinsics", &mapper->opt_ba.optimize_intrinsics); + AddAndRegisterDefaultOption("BundleAdjustment.optimize_principal_point", + &mapper->opt_ba.optimize_principal_point); AddAndRegisterDefaultOption("BundleAdjustment.optimize_points", &mapper->opt_ba.optimize_points); AddAndRegisterDefaultOption("BundleAdjustment.thres_loss_function", @@ -236,10 +238,12 @@ void OptionManager::AddInlierThresholdOptions() { added_inliers_options_ = true; AddAndRegisterDefaultOption("Thresholds.max_angle_error", &mapper->inlier_thresholds.max_angle_error); - AddAndRegisterDefaultOption("Thresholds.max_reprojection_error", - &mapper->inlier_thresholds.max_reprojection_error); - AddAndRegisterDefaultOption("Thresholds.min_triangulation_angle", - &mapper->inlier_thresholds.min_triangulation_angle); + AddAndRegisterDefaultOption( + "Thresholds.max_reprojection_error", + &mapper->inlier_thresholds.max_reprojection_error); + AddAndRegisterDefaultOption( + "Thresholds.min_triangulation_angle", + &mapper->inlier_thresholds.min_triangulation_angle); AddAndRegisterDefaultOption("Thresholds.max_epipolar_error_E", &mapper->inlier_thresholds.max_epipolar_error_E); AddAndRegisterDefaultOption("Thresholds.max_epipolar_error_F", From f822e863b3a6c34d5d26a8ca3c13967deb31df38 Mon Sep 17 00:00:00 2001 From: Linfei Pan Date: Tue, 4 Mar 2025 00:54:18 +0100 Subject: [PATCH 3/3] by default, do not optimize pp --- glomap/estimators/bundle_adjustment.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glomap/estimators/bundle_adjustment.h b/glomap/estimators/bundle_adjustment.h index e9b6390..36a142f 100644 --- a/glomap/estimators/bundle_adjustment.h +++ b/glomap/estimators/bundle_adjustment.h @@ -14,7 +14,7 @@ struct BundleAdjusterOptions : public OptimizationBaseOptions { bool optimize_rotations = true; bool optimize_translation = true; bool optimize_intrinsics = true; - bool optimize_principal_point = true; + bool optimize_principal_point = false; bool optimize_points = true; // Constrain the minimum number of views per track