Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Releases: colmap/colmap

3.13.0

07 Nov 15:43
0b31f98

Choose a tag to compare

New Features

  • Improved human-readable consistency checks when configuring a
    reconstruction with rigs, cameras, frames, and images.
  • Improved multi-GPU feature extraction & matching performance by avoiding global mutex.
  • Improved robustness of pose prior mapper against outlier priors.
  • Improved the performance of reconstruction initialization through parallelization.
  • Added CUDA-enabled pycolmap package for Linux and automatic publishing to PyPI.
  • Make the reconstruction process fully deterministic with a new random_seed parameter.
  • Added support for filtering stationary points in two-view geometry estimation.
  • Added option to perform geometric verification with rig constraints.
  • Added option to skip matching for image pairs within the same frame.
  • Added option to keep specific cameras or rigs constant during the reconstruction.
  • Added option to clean two-view geometries in database_cleaner.
  • Added option to specify timeout for incremental mapper.
  • Added an abstract database interface for easier integration with other database backends.
  • Added experimental support for feature sub-selection for global BA.
  • Added testing tools for synthetic reconstruction noise and image generation.
  • Added official support for Python 3.14.
  • Added support for Qt6 while still fully supporting Qt5.

Bug Fixes

  • Fixed various issues with new rig support.
  • Fixed rare deadlocks in feature matching.
  • Support for UTF-8 database paths in Windows.
  • Fixed bundle adjustment performance regression due to changed Gauge behavior.
  • Removed custom manifold from colmap to avoid issues with pyceres.
  • Fixed rare crash of GUI when clearing the model viewer.
  • Fixed focal length extraction from 35mm equivalent EXIF information.
  • Fixed coordinate bug in ComputeEqualPartsBboxes.

Breaking Changes

  • Dropped official support for Python 3.8.
  • Dropped official support for MacOS x86.
  • Upgraded to pybind11 3.X.
  • Removed deprecated rig bundle adjuster command in favor of rig configurator and
    default bundle adjuster supporting the same functionality.
  • Allow one-to-many matches in correspondence graph. Previously, only one-to-one matches were added
    to the correspondence graph and therefore other matches were not used during reconstruction.

Full Change List (sorted temporally)

  • Autoselect compatible nvidia for docker by @MasahiroOgawa in #3454
  • Add 3.12.1 changelog to main by @ahojnnes in #3461
  • Add min_num_neighbors constraint for spatial matching by @StonerLing in #3463
  • Refactor feature extraction/matching to support other features by @ahojnnes in #3465
  • Define VisualIndex::Read as static in python bindings by @ahojnnes in #3467
  • Only find C/CXX OpenMP components by @ahojnnes in #3469
  • Remove unnecessary GPU checks in pycolmap by @sarlinpe in #3472
  • Fix a bug affecting feature matching on GPU by @sarlinpe in #3473
  • Add command line option for TwoViewGeometry.detect_watermark by @gareth-cross in #3476
  • Add and test GetRelativePath by @sarlinpe in #3475
  • Update GetPathBaseName to rely on std::filesystem by @sarlinpe in #3481
  • Fix potential deadlock in job queue by @huluoboge in #3480
  • Update FindMetis.cmake to also link GK_LIBRARIES by @yeicor in #3470
  • Remove check in database_cache.cc that breaks backwards compatibility with image_list_file_path by @pd-karoly-harsanyi in #3478
  • Fix docker run script for GUI by @MasahiroOgawa in #3483
  • Ensure UTF-8 encoding for database paths passed to SQLite open by @StonerLing in #3482
  • Add changelog for 3.12.2 release by @ahojnnes in #3488
  • Add changelog for 3.12.3 release by @ahojnnes in #3490
  • Fix BundleAdjustmentConfig::SetConstantRigFromWorldPose by @whuaegeanse in #3501
  • Add random_seed option to RANSACOptions for reproducible TwoViewGeometry estimation by @StonerLing in #3492
  • Configure trivial rigs for unconfigured images by @ahojnnes in #3497
  • Fix pycolmap test command by @ahojnnes in #3506
  • Pano SFM example improvements and fixes by @ahojnnes in #3503
  • Support Python 3.14 and retire 3.8 by @ahojnnes in #3518
  • Upgrade ruff and automatically apply fixes by @ahojnnes in #3515
  • Update point3D errors after bundle adjustment or SfM by @whuaegeanse in #3500
  • Add option to filter stationary points in two-view geometry estimation by @ahojnnes in #3521
  • Add unit test for watermark detection by @ahojnnes in #3524
  • Fix comment for FilterStationaryMatches by @sarlinpe in #3525
  • Ignore compile_commands.json in git by @ahojnnes in #3526
  • Fix bundle adjustment performance regression due to changed Gauge by @ahojnnes in #3527
  • Bind CUDA utils in pycolmap by @ahojnnes in #3532
  • Add explicit tests for fixing gauge freedom and bugfix by @ahojnnes in #3533
  • Fix format specifier overflow in WriteSnapshot() timestamp by @StonerLing in #3534
  • Change input in cost function to log scale and remove custom manifold from colmap. by @B1ueber2y in #3538
  • Throw exception when image.SetFramePtr() sets a frame without the image listed as its data. by @B1ueber2y in #3540
  • Avoid frame having data from a sensor that does not exist in its associated rig. by @B1ueber2y in #3543
  • Revert scale changes for metric reconstruction in rig sfm. by @B1ueber2y in #3530
  • Fix comment for C++20 support. by @B1ueber2y in #3547
  • Clean up unused includes in scene folder by @ahojnnes in #3548
  • Add random_seed to IncrementalMapper to control all RANSAC seeds for improved SfM reproducibility by @StonerLing in #3544
  • Throw exception at counting registered images when an image in the frame does not exist in the reconstruction. by @B1ueber2y in #3546
  • Clean up unused includes in retrieval folder by @ahojnnes in #3549
  • Clean up unused includes in optim folder by @ahojnnes in #3550
  • Fix ModelViewerWidget::ClearReconstruction by @whuaegeanse in #3552
  • Fix build with Boost 1.89.0 by @cho-m in #3553
  • Clean up unused includes in util folder by @ahojnnes in #3551
  • Retire Mac x86 support by @ahojnnes in #3555
  • Update database bindings by @ahojnnes in #3556
  • Throw exception for Frame::SetRigId when rig pointer is available. by @B1ueber2y in #3558
  • Fix rig configuration with differing IDs between database and reconstruction by @ahojnnes in #3557
  • Removing the Global Lock in SiftGPUFeatureMatcher for CUDA backend by @yimingc in #3561
  • Add option to skip matching for image pairs in same frame by @ahojnnes in #3563
  • Add option to keep specific cameras constant by @ahojnnes in #3565
  • Throw exception if any camera in the rig does not exist in the reconstruction. by @B1ueber2y in #3564
  • Clean up unused includes in controllers folder by @ahojnnes in #3566
  • Extract image pair conversion functions into type utils by @ahojnnes in #3568
  • Clean up unused includes in estimators folder by @ahojnnes in #3567
  • Expect error threshold for generalized relative pose in pixel space by @ahojnnes in #3571
  • Add function to read number of matches by @ahojnnes in #3572
  • Add a test to ensure THROW_CHECK conditions are evaluated exactly once by @ahojnnes in #3573
  • Simplify and reuse feature matcher thread creation by @ahojnnes in #3575
  • Increase exhaustive matching cache size by @ahojnnes in #3576
  • Add option to clean two-view geometries by @ahojnnes in #3577
  • Decouple feature matching and two-view geometry options by @ahojnnes in #3578
  • Display CLI floating-point defaults with 3 significant digits by @StonerLing in #3579
  • Make...
Read more

3.12.6

17 Sep 09:23
4d5b60e

Choose a tag to compare

Improvements

  • Upgrade to pybind 3.0.1 and use smart holder for all classes.
  • Support both Qt5 and Qt6.
  • Ensure download support on Ubuntu by installing libssl-dev for crypto.
  • Add bindings for mvs::model for covisibility support in pycolmap.
  • Add missing rig and frame interfaces for pycolmap database.
  • Throw exception when the rig configurations of the database and existing reconstruction are inconsistent.
  • Improve the Gauge logic for fixing two views.

Bug Fixes

  • Fix focal length extraction from 35mm equivalent.
  • Fix inconsistent pycolmap naming for RegisterFrame and DeRegisterFrame.
  • Call Retriangulate irrespective of the logging level.
  • Fix bundle adjustment with constant rig from world pose.

3.12.5

22 Aug 10:27
fe704d0

Choose a tag to compare

Improvements

  • Add various safety checks with more understandable error messages
    when adding misconfigured rigs/cameras/frames/images to the reconstruction.
  • Recover original metric reconstruction scale in case of configured rigs.

Bug Fixes

  • Fix incompatibilities due to redundant symbol definition in pycolmap/pyceres.
  • Fix error threshold for generalized relative pose to be in pixel space.
  • Fix rig configuration in case of inconsistent IDs in database/reconstruction.
  • Fix missing colmap namespace in sqlite3 macro.
  • Fix CMake configuration with Boost 1.89 or newer.
  • Fix viewer crash when clearing the reconstruction.

3.12.4

05 Aug 10:50

Choose a tag to compare

Bug Fixes

  • Fix global bundle adjustment performance regression due
    to changing gauge fixing mechanism by fixing points vs. cameras.

3.12.3

16 Jul 12:57
74b2be9

Choose a tag to compare

Bug Fixes

  • Set correct version number

3.12.2

16 Jul 09:50
f6dc2cf

Choose a tag to compare

Bug Fixes

  • Define VisualIndex::Read as static in python bindings
  • Only find C/CXX OpenMP components to support new CMake versions
  • Fix a bug affecting feature matching on GPU
  • Fix potential deadlock in job queue
  • Update FindMetis.cmake to also link GK_LIBRARIES
  • Fix backwards compatibility in mapper with custom image list
  • Fix docker run script for GUI

3.12.1

06 Jul 07:36
ac5ca67

Choose a tag to compare

Bug Fixes

  • Fix Docker runtime libraries
  • Fix spatial matcher bug
  • Minor fixes for documentation

3.12.0

30 Jun 19:22
e7e89eb

Choose a tag to compare

COLMAP 3.12.0 (06/30/2025)

New Features

  • Support for modeling sensor rigs (and thus multi-camera rigs and panoramas).
    For more details and usage examples, see: https://colmap.github.io/rigs.html.
  • Automatic download and caching of vocabulary trees and other resources.
  • Support for converting between LLA and UTM coordinates.
  • Improved minimal solvers for affine transform and generalized absolute/relative pose.
  • Improved absolute pose estimation by minimizing pixel error in image space.
  • Replaced FLANN with faiss for fast approximate nearest neighbor search
    for improved speed in CPU-based feature matching and vocabulary tree-based image retrieval.
  • Support for propagating relative pose covariance.
  • Support visualization of models with arbitrary origin and scale (e.g., in GPS space).
  • Reconstruction benchmark for ETH3D, IMC, BlendedMVS datasets.
  • Measure and report code test coverage in CI.

Bug Fixes

  • Fixed RANSAC stopping criterion, see https://arxiv.org/pdf/2503.07829.
  • Fixed and improved two-view pose and triangulation angle estimation.
  • Fix rare deadlock during vocab tree feature matching.
  • For other bug fixes, see full list of changes below.

Breaking Changes

  • Serialization of reconstruction and database contains a new abstraction: rigs and frames.
    The reconstruction output contains two new files rigs.{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 poses (and thus image poses) are now composed as:
    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.
  • Default bundle adjuster supports sensor rigs and thus rig bundle adjuster is deprecated.
  • FLANN-based vocabulary trees are incompatible with faiss. New trees automatically
    downloaded, if no vocab_tree_path is provided, otherwise manual download and update required.
  • Removed official support for Ubuntu 20.04, MacOS 13, and Visual Studio 2019.

Full Change List (sorted temporally)

  • Cancel previous Github action runs upon push by @ahojnnes in #2998
  • Fix ccache installation in pycolmap windows CI by @ahojnnes in #2997
  • Use Azure blob storage as vcpkg binary cache by @ahojnnes in #2999
  • Add missing openmp flags in retrieval for flann parallelization by @ahojnnes in #3018
  • Separate read and write SAS tokens for vcpkg binary cache by @ahojnnes in #3027
  • Define vcpkg binary cache source inline by @ahojnnes in #3028
  • Fix conditional vcpkg binary cache config in bash by @ahojnnes in #3031
  • Avoid absolute path for the include directory installation by @jhacsonmeza in #3024
  • Add conversion between LLA and UTM coords. by @StonerLing in #3030
  • Improve interface for ReadWriteBinaryBlob and add tests by @ahojnnes in #3033
  • Add support for downloading files by @ahojnnes in #3022
  • Add function to compute sha256 digest by @ahojnnes in #3035
  • Automatically download and cache vocabulary tree by @ahojnnes in #3036
  • Set vcpkg default features and synchronize to latest vcpkg by @ahojnnes in #3038
  • Avoid unnecessary copy of input elements in Percentile/Median by @ahojnnes in #3039
  • Abstract algorithm class IncrementalMapperImpl by @B1ueber2y in #3040
  • Perform linear interpolation in percentile computation by @ahojnnes in #3041
  • Avoid dependent inputs in IncrementalMapperImpl by @B1ueber2y in #3043
  • Reorder destructors for better safety in EndReconstruction by @B1ueber2y in #3046
  • Improvements for reconstruction normalization / bbox / centroid by @ahojnnes in #3047
  • Speedup affine transform minimal solver, create python bindings by @ahojnnes in #3049
  • Fix compilation with DOWNLOAD_ENABLED=OFF by @ahojnnes in #3053
  • Consistent interface/tests for rigid3d/sim3d/affine2d, pycolmap bindings for rigid3d by @ahojnnes in #3051
  • Improve logging for errors in masking during feature extraction by @Ambrosiussen in #3034
  • Add copy constructor support for solver-related ceres bindings by @B1ueber2y in #3059
  • Minor fix on using pycolmap bundle adjuster with pyceres by @B1ueber2y in #3060
  • Re-enable interface support for covariance estimation from a Ceres::Problem instance by @B1ueber2y in #3061
  • Only cancel CI runs in PRs and not in main/release branches by @ahojnnes in #3063
  • Add binding support for invalid values in pycolmap id types by @B1ueber2y in #3072
  • Fix custom quality level in ETH3D benchmark by @ahojnnes in #3076
  • Set max_num_features automatically per quality level by @ahojnnes in #3077
  • Make it possible to build the MVS doc even when CUDA is not installed by @sarlinpe in #3078
  • Temporarily disable ccache in the pycolmap macOS CI by @sarlinpe in #3084
  • Add option to specify image list in automatic reconstruction by @ahojnnes in #3074
  • Only create OpenGL context in automatic reconstruction if necessary by @ahojnnes in #3075
  • Remove unnecessary braces around initializer in pycolmap/covariance by @ahojnnes in #3080
  • Remove temporary fixes for macOS CI by @sarlinpe in #2954
  • Reconstruction benchmark by @ahojnnes in #2714
  • Re-enable ccache in pycolmap Mac CI by @sarlinpe in #3085
  • Fix transitive completion in incremental triangulator by @ahojnnes in #3094
  • Fix image deletion, hide point viewer widget after deletion by @ahojnnes in #3098
  • Fix download functionality under Windows by @ahojnnes in #3099
  • Add back detailed logs for covariance estimation by @B1ueber2y in #3082
  • Fix reprojection error in camera rig cost function by @binbin-xu in #3106
  • Install missing libcurl4 runtime library in dockerfile by @ahojnnes in #3122
  • Expose incremental mapper pose prior options in pycolmap by @ahojnnes in #3123
  • Remove year from copyright by @ahojnnes in #3124
  • Use poselib for generalized absolute pose minimal solver by @ahojnnes in #3125
  • Add code coverage reporting by @ahojnnes in #3126
  • Fix synthetic prior generation when stddev=0 by @ahojnnes in #3128
  • Create temporary colmap test directy under system test directory by @ahojnnes in #3129
  • Minor: pyceres is no longer a must for running pycolmap bundle adjuster by @B1ueber2y in #3130
  • Fix cost functor convention for benchmarking by @B1ueber2y in #3131
  • Support enum from string conversion by @ahojnnes in #3132
  • More robustly handle degenerate triangulation angles by @ahojnnes in #3135
  • Minor: add missing empty namespace in alignment testing script by @B1ueber2y in #3137
  • Add frame impl for future rig support by @B1ueber2y in #2698
  • Rename RigCalibration to RigCalib by @ahojnnes in #3142
  • Fix and improve two-view pose and triangulation angle estimation by @ahojnnes in #3146
  • Fix covariance propagation of pose inverse by @B1ueber2y in #3155
  • [Spherical Camera Support] Change essential matrix estimation to use camera rays by @ahojnnes in #3159
  • Improve incremental mapper initialization logic by @ahojnnes in #3161
  • Improved RANSAC dependency injection by @ahojnnes in #3165
  • Add docs on the left convention in COLMAP for covariance propagation. by @B1ueber2y in https:/...
Read more

3.11.1

06 Dec 16:02
682ea9a

Choose a tag to compare

Bug Fixes

  • Fix typo in pycolmap function align_reconstruction_to_locations interface by @B1ueber2y in #2961
  • Add back some ceres bindings to use pycolmap bundle adjustment without pyceres by @B1ueber2y in #2985
  • Fix setting of RANSAC max error in pose prior BA alignment by @ahojnnes in #2993

Full Changelog: 3.11.0...3.11.1

3.11.0

28 Nov 13:27
aa08784

Choose a tag to compare

New Features

  • New pose prior based incremental mapper that can leverage absolute pose priors from e.g. GPS measurements.
  • New bundle adjustment covariance estimation functionality. Significantly faster and more robust than Ceres.
  • API documentation with auto-generated stubs for pycolmap.
  • Use PoseLib's minimal solvers for faster performance and improved robustness.
  • Experimental support for CUDA-based bundle adjustment through Ceres (disabled by default).
  • Support for reading 16-bit PNG grayscale images.
  • New RAD_TAN_THIN_PRISM_FISHEYE camera model in support of Meta's Project Aria devices.
  • Replace numerical with analytical Jacobian in image undistortion for better convergence.
  • Many more performance optimizations and other improvements. See full list of changes below.

Bug Fixes

  • Fixed non-deterministic behavior of CUDA SIFT feature extractor. Broken since 3.10 release.
  • Fixed orientation detection of covariant/affine SIFT feature extractor. Broken since initial release.
  • Fixed point triangulator crashing due to bug in observation manager. Broken since 3.10 release.
  • Fixed sequential feature matcher overlap missing the farthest image. Broken since initial release.
  • Fixed rare deadlock during matching due to concurrent database access. Broken since 3.10 release.
  • Fixed little/big endian detection. Broken since 3.1 release.
  • For other bug fixes, see full list of changes below.

Breaking Changes

  • 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.
    • Replaced Image.registered by Image.{has_pose,reset_pose}.
    • Replaced Image.{get_valid_point2D_ids,get_valid_points2D} by Image.{get_observation_point2D_idxs,get_observation_points2D}.
    • Replaced Track.{append,remove} by Track.{add_element,delete_element}.
    • AbsolutePoseErrorCost becomes AbsolutePosePriorCost.
    • MetricRelativePoseErrorCost becomes RelativePosePriorCost.
    • The signature of 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.

Full Change List (sorted temporally)

Read more