diff --git a/glomap/controllers/option_manager.cc b/glomap/controllers/option_manager.cc index d1e03042..9b8fb6a1 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", @@ -234,6 +236,14 @@ 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 ee2be7a7..3bc83d0f 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 76a81b9e..36a142f3 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 = false; bool optimize_points = true; // Constrain the minimum number of views per track