CHANGELOG.rst
global_mapper and
automatic_reconstructor --mapper GLOBAL commands. Many fixes and improvements
have been applied to the GLOMAP codebase as part of this migration.
GLOMAP is maintained through the COLMAP repository going forward.
The global pipeline uses view graph calibration to estimate
intrinsics from two-view geometries, which may produce different camera
parameters compared to the incremental pipeline's self-calibration.pycolmap.match_from_pairs for custom pair matching on GPU.isnan.AddPoint3D with point3D_id.fix_existing_frames option in the incremental pipeline.BundleAdjustmentConfig::NumResiduals ignoring point statistics.ExifFocalLength metadata extraction.ThreadPool::Wait.filter_frames_ usage in FindNextImages.model_aligner crash by using new pose prior API.TwoViewGeometry fields cam2_from_cam1, E, F, H are now std::optional.Rigid3d and Sim3d parameters stored as single vector.
Use rotation() and translation() accessor methods instead of direct member access.BundleAdjuster now returns std::shared_ptr<BundleAdjusterSummary> instead of ceres::SolverSummary.BundleAdjustmentCeres.*.DatabaseCache initialization consolidated into a single options struct
instead of scattered arguments.std::string to std::filesystem::path throughout
the C++ codebase. Python pathlib.Path objects are now automatically
converted. No breaking impact on the Python interface.isnan by @nharbiso in https://github.com/colmap/colmap/pull/3720TwoViewGeometry.detect_watermark by @gareth-cross in https://github.com/colmap/colmap/pull/3476rigs.{bin,txt} and frames.{bin,txt}.
The database contains new tables: rigs, rig_sensors, frames, frames_data.
Reading from existing reconstructions and databases (without rigs/frames) is fully backwards
compatible and vice versa reading new reconstructions (with rigs/frames) using old code is
fully forwards compatible.sensor_from_world = sensor_from_rig * rig_from_world. Previously, image.cam_from_world
returned a reference to the pose parameters. Now it returns a copy of the pose composition:
image.cam_from_world() = image.frame.rig.sensor_from_rig(image.camera.sensor_id) * image.frame.rig_from_world
with the underlying pose parameters stored in the rig and frame objects.Dropped official support for Ubuntu 18.04, Visual Studio 2019.
Upgrade to C++17 standard in C++ and C++14 in CUDA source code.
New pose_priors table in database in support of pose prior based mapper.
PyCOLMAP API:
align_reconstrution_to_locations is renamed to align_reconstruction_to_locations (typo).pycomap.cost_functions becomes a module and should be explicitly imported as import pycolmap.cost_functions.Image.registered by Image.{has_pose,reset_pose}.Image.{get_valid_point2D_ids,get_valid_points2D} by Image.{get_observation_point2D_idxs,get_observation_points2D}.Track.{append,remove} by Track.{add_element,delete_element}.AbsolutePoseErrorCost becomes AbsolutePosePriorCost.MetricRelativePoseErrorCost becomes RelativePosePriorCost.ReprojErrorCost and related cost functions was changed: arguments are reordered, the detection uncertainty is now a 2x2 covariance matrix.BundleAdjuster becomes virtual and should be created with pycolmap.create_default_bundle_adjuster().absolute_pose_estimation becomes estimate_and_refine_absolute_pose.pose_refinement becomes refine_absolute_pose.essential_matrix_estimation becomes estimate_essential_matrix.fundamental_matrix_estimation becomes estimate_fundamental_matrix.rig_absolute_pose_estimation becomes estimate_and_refine_generalized_absolute_pose.homography_matrix_estimation becomes estimate_homography_matrix.squared_sampson_error becomes compute_squared_sampson_error.homography_decomposition becomes pose_from_homography_matrix.Rigid3d.essential_matrix becomes pycolmap.essential_matrix_from_pose.Image::cam_from_world_ optional by @sarlinpe in https://github.com/colmap/colmap/pull/2824*_mapper to *_pipeline files by @ahojnnes in https://github.com/colmap/colmap/pull/2870__repr__, __eq__ overloads to C++ side by @ahojnnes in https://github.com/colmap/colmap/pull/2915RunModelSplitter (#1513) by @Serenitysmk in https://github.com/colmap/colmap/pull/1531libmetis-dev to solve METIS_INCLUDE_DIRS. by @FavorMylikes in https://github.com/colmap/colmap/pull/1672image_deleter command to remove images from sparse modelimage_filter command to filter bad registrations from sparse modelpoint_filtering command to filter sparse model point cloudsdatabase_merger command to merge two databases, which is
useful to parallelize matching across different machinesimage_undistorter_standalone to enable undistorting images
without a pre-existing full sparse modelsrc/exe/colmap.cc executable. The GUI can now be
started using the command colmap gui and other commands are available
as colmap [command]. For example, the feature extractor is now available
as colmap feature_extractor [args] while all command-line arguments stay
the same as before. This should result in much faster project compile times
and smaller disk space usage of the program. More details about the new
interface are documented at https://colmap.github.io/cli.html