CHANGELOG.rst
panorama_sfm example.panorama_sfm example to now convert perspective cameras
back to equirectangular and added global mapping support.CamRayFromImg bearing-vector unprojection interface and bindings.fx/fy in the p4pf solver for two-focal camera models.version CLI command to print the COLMAP version.MVS_ENABLED build option to compile without the MVS module.GlobalMapper.keep_max_num_tracks option to bound the number of
established tracks.ReprojectionErrorType and
additional point filter methods.IndexIVFScalarQuantizer
instead of IndexIVFFlat.merge_trials_.mvs::Image::SetBitmap.CorrespondenceGraph and ObservationManager
construction, decoupling reg_stats from ObservationManager.std::optional from Bitmap::GetPixel/Interpolate*.MaybeDecomposeRelativePoses for old databases.FinalizeDataIds().SetPoints2D (take Point2D vector by value).--fast mode,
better parallelism and per-step logging, per-dataset/overall summary rows,
GT-covisibility-based filtering, and dynamic scheduling.WERROR option to the pycolmap build.global_mapper point3D.error units for model_analyzer.PoissonRecon num_threads handling and undefined behavior.pycolmap.Database() abort on garbage collection.Bitmap::Read/Bitmap::Write.RefineGeneralizedAbsolutePose and only
set the manifold when residuals exist.refine_sensor_from_rig to all stages of the global mapper.mesh_texturer occlusion check edge case.RegisterNextStructureLessImage when NumRegImages < 2.Findonnxruntime.cmake.std::filesystem::relative to lexically_relative for
NormalizePath.AdjustGlobalBundle after aggressive frame filtering.reg_stats/observation stats and add underflow guards in mapper
bookkeeping, and clear num_reg_images.pyceres .problem attribute on CeresBundleAdjuster factory.min_score
keypoint filtering.ModelViewerWidget to call makeCurrent().GpuMat constructor.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