Skip to content

Latest commit

 

History

History
1905 lines (1842 loc) · 167 KB

File metadata and controls

1905 lines (1842 loc) · 167 KB

Changelog

COLMAP 4.0.4 (04/27/2026)

Bug Fixes

  • Log an error instead of crash on unknown EXIF orientation
  • Fix crash in AdjustGlobalBundle after aggressive frame filtering
  • Change std::filesystem::relative to lexically_relative for NormalizePath
  • Fix onnxruntime DLL copy error under Windows in Findonnxruntime.cmake

COLMAP 4.0.3 (04/06/2026)

Bug Fixes

  • Fix various issues in incremental mapper's reg_stats bookkeeping
  • Fix reading of dynamic matrices in SQLite3 database
  • Fix optional access in guided matching
  • Fix conditional Eigen alignment for 3.4.0 pre-release version
  • Fix ceres::GradientChecker constructor for older Ceres versions
  • Fix for pycolmap installation related to ONNX
  • Fix bug where num_reg_images was not cleared
  • Fix mask usage log never printing in feature writer thread
  • Fix undefined behavior in PoissonRecon
  • Fix locale-dependent float parsing/formatting
  • Fix empty PatchMatch results on Blackwell GPUs (sm_100+)
  • Fix pyceres .problem attribute on CeresBundleAdjuster returned by factory functions
  • Fix missing rotation averaging options to global mapper
  • Fix piping of bundle adjustment options in global mapper

Improvements

  • Handle CHOLMOD includes not being in a subdirectory
  • Use non-deprecated SQLite3::SQLite3 CMake target
  • Reduce thread oversubscription in hierarchical mapper

COLMAP 4.0.2 (03/18/2026)

Bug Fixes

  • Fix ALIKED keypoint score filtering
  • Fix ALIKED extraction with pycolmap
  • Fix missing reset of mesh simplification options

COLMAP 4.0.1 (03/15/2026)

Bug Fixes

  • Add missing LightGlue matcher type to GUI
  • Fix checks in GpuMat constructor
  • Add destructor to ModelViewerWidget to call makeCurrent()

COLMAP 4.0.0 (03/14/2026)

New Features

  • Integrated GLOMAP global SfM pipeline into COLMAP as a first-class alternative to the incremental/hierarchical mappers, available via the 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.
  • Added ALIKED (N16Rot/N32) feature extraction through ONNX support. Support for brute-force and LightGlue matching as well as scalable matching with pre-trained vocabulary trees.
  • Added LightGlue ONNX feature matching for SIFT and ALIKED.
  • Added Python bindings for feature extractor and matcher.
  • Added support for reading image orientation from EXIF and auto-rotating images during feature extraction/matching for better robustness against rotational viewpoint changes.
  • Added structure-less image registration fallback using generalized relative pose estimator for registering images without 3-view overlap.
  • Added division camera models (SIMPLE_DIVISION, DIVISION).
  • Added fisheye camera model without distortion parameters (FISHEYE).
  • Improved Ceres bundle adjustment performance by ~10% through single pose parameter block.
  • Improved Ceres bundle adjustment performance by ~15% for SIMPLE_RADIAL camera model and trivial frames through analytical Jacobians.
  • Added abstract general bundle adjuster and solver summary in preparation for supporting different optimization backends.
  • Replaced FreeImage with OpenImageIO for ~2.5x faster image I/O, support for more image formats, and using an actively maintained dependency with security fixes, etc.
  • Added guided geometric verification using a known reconstruction.
  • Added view graph calibration as a new module.
  • Added model clustering to partition large reconstructions into smaller, manageable sub-models based on scene connectivity.
  • Added mesh simplification using Quadric Error Metric (QEM) decimation.
  • Added mesh texture mapping for producing textured meshes from calibrated images.
  • Added option to specify JPEG quality during image undistortion.
  • Added support for loading bitmaps with alpha channel.
  • Added option to control refinement of 3D points in bundle adjuster.
  • Added optional support for position prior in absolute pose refinement.
  • Added supernodal CHOLMOD L1 solver support.
  • Added multi-threading support for (LO)RANSAC loop.
  • Added support for custom SSL certificate locations through SSL_CERT_FILE and SSL_CERT_DIR environment variables.
  • Added support for static Windows builds with CUDA.
  • Exposed pycolmap.match_from_pairs for custom pair matching on GPU.
  • Added Python bindings for depth and normal maps.
  • Added Python type checking (mypy) for all code.
  • Improved incremental mapper and triangulator Python bindings.
  • Added support for visualizing (textured) meshes in the GUI.
  • Added drag-and-drop folder support for model import in the GUI.
  • Added drag-and-drop support for PLY import in the GUI.
  • Switched to native menu bar in GUI on macOS.
  • Added support for building shared libraries.
  • Improved patch match stereo performance by reading inputs in parallel.
  • Reduced model viewer memory usage in the GUI.
  • Added automatic fallback to BA CPU solver if GPU solver fails.
  • For other minor improvements, see full list of changes below.

Bug Fixes

  • Fixed guided matching for calibrated non-linear cameras.
  • Fixed database race conditions in mapping pipelines.
  • Fixed MSVC compatibility with isnan.
  • Fixed undefined behavior in feature match swapping.
  • Fixed SVD computation in affine transform.
  • Fixed 2D association issue at AddPoint3D with point3D_id.
  • Fixed several issues in database merging.
  • Fixed MVS workspace image downsizing.
  • Fixed pycolmap to respect fix_existing_frames option in the incremental pipeline.
  • Fixed transcription of image IDs in reconstruction from database.
  • Fixed BundleAdjustmentConfig::NumResiduals ignoring point statistics.
  • Fixed incorrect propagation of incremental options in automatic reconstructor.
  • Fixed triangulation angle computation in patch match sampling.
  • Fixed inverted units in ExifFocalLength metadata extraction.
  • Fixed slow performance of generalized absolute pose estimator verification.
  • Propagate exceptions from ThreadPool::Wait.
  • Fixed empty patch match results on CUDA compute >= 100 (Blackwell GPUs).
  • Fixed filter_frames_ usage in FindNextImages.
  • Fixed model_aligner crash by using new pose prior API.
  • For other bug fixes, see full list of changes below.

Breaking Changes

  • Replaced FreeImage with OpenImageIO for image I/O. There may be slight differences in terms of supported image formats and loaded pixel values.
  • Dropped support for Python 3.9 due to EOL.
  • 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.
  • Bundle adjustment cost functors use single pose parameter blocks.
  • BundleAdjuster now returns std::shared_ptr<BundleAdjusterSummary> instead of ceres::SolverSummary.
  • Ceres-related CLI options are prefixed with BundleAdjustmentCeres.*.
  • GPS/ENU coordinate conversion functionality cleaned up, breaking the Python interface.
  • Feature descriptors are now associated with a type that is propagated through the pipeline and storage. Fails matching if descriptor types are inconsistent.
  • Pose priors associated with generic sensor measurement data.
  • DatabaseCache initialization consolidated into a single options struct instead of scattered arguments.
  • Switched paths from 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.

Full Change List (sorted temporally)

  • Fix MSVC compatibility with isnan by @nharbiso in colmap#3720
  • Include v3.13 to legacy dropdown. by @B1ueber2y in colmap#3724
  • (bugfix) initializing added_two_view_geometry_options to false by @AlePuglisi in colmap#3727
  • Update the tag of the doc submodule to the latest commit. by @B1ueber2y in colmap#3729
  • Fix duplicated parameters for pycolmap.extract_features and fix pycolmap README. by @B1ueber2y in colmap#3728
  • Document how to speed up bundle adjustment by @StonerLing in colmap#3730
  • Fix reconstruction benchmark by @ahojnnes in colmap#3731
  • Remove doc submodule for easier maintenance. by @B1ueber2y in colmap#3732
  • Fix undefined behavior in feature match swapping by @ahojnnes in colmap#3733
  • Fix SVD computation in affine transform by @ahojnnes in colmap#3734
  • Fix random seed stability tests for incremental mapper by @ahojnnes in colmap#3735
  • Structure-less image registration using generalized relative pose estimator by @ahojnnes in colmap#2829
  • Add supernodal cholmod L1 solver support and more tests by @ahojnnes in colmap#3737
  • Add union-find implementation by @ahojnnes in colmap#3738
  • Add unit tests for base controller by @ahojnnes in colmap#3739
  • Add unit tests for PLY utils by @ahojnnes in colmap#3742
  • Inline SQLite3 utils in database implementation by @ahojnnes in colmap#3741
  • Allow reuse of cholesky decomposition in L1 solver by @ahojnnes in colmap#3743
  • Add unit tests for controller thread by @ahojnnes in colmap#3740
  • Add drag-and-drop folder support for model import in the GUI by @StonerLing in colmap#3744
  • Update to latest vcpkg by @ahojnnes in colmap#3745
  • Include instructions to update documentation after new releases by @chipironcin in colmap#3716
  • Remove unused CMake warning level variable by @ahojnnes in colmap#3747
  • Import of GLOMAP source code by @ahojnnes in colmap#3748
  • Correct the spelling of GeometricVerifier. by @B1ueber2y in colmap#3749
  • Update Windows ccache to 4.12.1 by @ahojnnes in colmap#3750
  • Remove custom glomap constants by @ahojnnes in colmap#3751
  • Remove unnecessary glomap Camera by @ahojnnes in colmap#3753
  • Misc code quality improvements for max spanning tree by @ahojnnes in colmap#3755
  • Configure clang-format for glomap code by @ahojnnes in colmap#3756
  • Support two view geometry with empty inlier matches in the database. by @B1ueber2y in colmap#3754
  • Modularize glomap libraries by @ahojnnes in colmap#3757
  • Use colmap reconstruction matchers in global mapper tests by @ahojnnes in colmap#3758
  • Fix WriteTwoViewGeometry when inlier matches are empty. by @B1ueber2y in colmap#3761
  • Add support for geometric verification given known reconstruction. by @B1ueber2y in colmap#3752
  • Enable glomap tests in CI by @ahojnnes in colmap#3759
  • Replace custom glomap Track with colmap Point3D by @ahojnnes in colmap#3762
  • Add missing option: FeatureMatching.skip_image_pairs_in_same_frame by @B1ueber2y in colmap#3765
  • Use fundamental/essential matrix utils from colmap by @ahojnnes in colmap#3768
  • Clean up redundant/unnecessary glomap rigid3d helper functions by @ahojnnes in colmap#3764
  • Add option to skip geometric verification at feature matching. by @B1ueber2y in colmap#3766
  • Fix missing colmap namespace in util/file.h macro. by @B1ueber2y in colmap#3770
  • Add missing header for the enum macros and remove colmap namespace. by @B1ueber2y in colmap#3771
  • Upgrade to latest vcpkg. by @B1ueber2y in colmap#3774
  • Add convenience method for filtering data by sensor type by @ahojnnes in colmap#3776
  • Cleanup redundant sqlite database merge implementation, consistent variable naming by @ahojnnes in colmap#3778
  • Add missing bindings for Bitmap and cleanup by @sarlinpe in colmap#3780
  • Set frame_id when reading database images by @ahojnnes in colmap#3779
  • Handle near zero matrices or identity transformations in gmock matchers by @ahojnnes in colmap#3782
  • Fix pycolmap to respect fix_existing_frames option by @S-o-T in colmap#3781
  • Add non-inserting FindIfExists to UnionFind by @B1ueber2y in colmap#3783
  • Use existing ceres function to stringify termination type by @ahojnnes in colmap#3784
  • Add convenience Python constructors for data_t/sensor_t by @ahojnnes in colmap#3785
  • Add utility function to compute Rigid3d origin by @ahojnnes in colmap#3773
  • Allow running glomap from colmap main executable by @ahojnnes in colmap#3769
  • Associate pose priors to generic sensor measurement data by @ahojnnes in colmap#3777
  • Enable compiler warnings as errors in GCC/CLang CI builds by @ahojnnes in colmap#3788
  • Remove debug log statement in db management widget by @ahojnnes in colmap#3789
  • Rename PosePrior::IsValid to HasPosition by @ahojnnes in colmap#3786
  • Add gravity to pose prior by @ahojnnes in colmap#3787
  • Disable editing of images in database management widget by @ahojnnes in colmap#3792
  • Fix and simplify database pose prior migration by @ahojnnes in colmap#3791
  • Synthesize gravities and move pose prior noise synthesis by @ahojnnes in colmap#3795
  • Replace FreeImage with OpenImageIO by @ahojnnes in colmap#3459
  • Add support on adding camera/image with trivial rig/frame to reconstruction. by @B1ueber2y in colmap#3800
  • Rename HasTrivialFrame to IsRefInFrame. by @B1ueber2y in colmap#3801
  • Ensure that the rig has only one sensor at AddImageWithTrivialFrame. by @B1ueber2y in colmap#3802
  • Fix meta data cloning when cloning bitmap by @ahojnnes in colmap#3812
  • Remove unused includes in MVS image by @ahojnnes in colmap#3813
  • Create global mapper pipeline by @ahojnnes in colmap#3808
  • Fix stand-alone python visualizer. by @B1ueber2y in colmap#3816
  • Remove the deprecated read_write_model.py from colmap. by @B1ueber2y in colmap#3817
  • refactor: Replace OpenSqliteDatabase with Database::Open by @whuaegeanse in colmap#3818
  • Replace glomap gravity info with pose prior by @ahojnnes in colmap#3794
  • Relax CUDA requirements in Python wheels by @sarlinpe in colmap#3799
  • Fix copying behaviors of empty bitmap. by @B1ueber2y in colmap#3823
  • Don't build CUDA wheels for all Python versions in PRs by @sarlinpe in colmap#3824
  • Fix NumResiduals ignore point statistics and update test assertion by @whuaegeanse in colmap#3820
  • Add unit tests for MVS workspace by @ahojnnes in colmap#3825
  • Fix transcription of image IDs in reconstruction from database by @ahojnnes in colmap#3826
  • Towards removing custom glomap image class by @ahojnnes in colmap#3805
  • Add unit tests for MVS image by @ahojnnes in colmap#3828
  • Remove unused includes in MVS fusion by @ahojnnes in colmap#3829
  • Add simple integration test for MVS fusion by @ahojnnes in colmap#3830
  • Remove custom glomap image class by @ahojnnes in colmap#3835
  • Add integration tests for meshing, update poisson recon library to 18.75 by @ahojnnes in colmap#3834
  • Consolidate calculation of angle between vectors by @ahojnnes in colmap#3836
  • Clean up unused includes from geometry folder by @ahojnnes in colmap#3837
  • Clean up redundant glomap executable by @ahojnnes in colmap#3838
  • Update FAQ on dense stereo stage requirements by @The-Cyber-Captain in colmap#3840
  • Improve glomap cost function, add tests by @ahojnnes in colmap#3839
  • Refactor general cost function utils and add NormalPriorCost and NormalErrorCost. by @B1ueber2y in colmap#3843
  • Various improvements and fixes on glomap gravity impl. by @B1ueber2y in colmap#3844
  • Fix misleading logging for structure-less registration. by @B1ueber2y in colmap#3848
  • Remove glomap types_sfm.h and only include necessary headers. by @B1ueber2y in colmap#3849
  • Improvements and fixes on glomap two view geometry. by @B1ueber2y in colmap#3847
  • Move cluster id logic to top level and remove custom glomap Frame class. by @B1ueber2y in colmap#3850
  • Migrate glomap gravity utilities into colmap and add tests. by @B1ueber2y in colmap#3845
  • Move InlierThresholdOptions and remove unnecessary includes. by @B1ueber2y in colmap#3851
  • Minor: throw instead of LOG(ERROR) when SQLITE3_EXEC fails. by @B1ueber2y in colmap#3855
  • Add integration tests for image undistorters by @ahojnnes in colmap#3856
  • Pass database as pointer instead of reference in global mapper. Drop GlobalMapperResume. by @B1ueber2y in colmap#3846
  • Use colmap::Reconstruction instead of scattered variables in glomap. by @B1ueber2y in colmap#3853
  • Use temporary storage for camera centers in global positioning. by @B1ueber2y in colmap#3854
  • Fix workspace image downsizing and improve tests by @ahojnnes in colmap#3857
  • Fix bitmap copy assignment test by @ahojnnes in colmap#3859
  • Add test for BitmapColor printing by @ahojnnes in colmap#3860
  • [Improve RA] Add PairConstraint, remove image_id_to_idx and improve naming/comments. by @B1ueber2y in colmap#3858
  • Add test for spatial verification in image retrieval, fix crash for invalid transformations by @ahojnnes in colmap#3862
  • Attempt to make visual index spatial verification tests deterministic by @ahojnnes in colmap#3870
  • Minor: rename glomap cost_function.h to cost_functions.h. by @B1ueber2y in colmap#3872
  • Fix 2D association issue at AddPoint3D with point3D_id. by @B1ueber2y in colmap#3867
  • [Improve RA] Abstract RotationAveragingProblem and RotationAveragingSolver. by @B1ueber2y in colmap#3861
  • Move relative pose filtering utilities into ViewGraph. by @B1ueber2y in colmap#3864
  • Fix database race conditions in mapping pipelines by @ahojnnes in colmap#3865
  • Improve stability of visual index spatial verification test by @ahojnnes in colmap#3874
  • Fix glomap track retriangulation refinement termination status by @ahojnnes in colmap#3873
  • Propagate exceptions from ThreadPool::Wait by @ahojnnes in colmap#3869
  • Catch AggregateException for ThreadPool. by @B1ueber2y in colmap#3875
  • Use DeRegisterFrame over ResetPose in view graph and track retriangulation. by @B1ueber2y in colmap#3877
  • Add Reconstruction::IsValid to check if a reconstruction object is not broken. by @B1ueber2y in colmap#3878
  • Improve the horrendous logic and naming in rotation initializer. by @B1ueber2y in colmap#3876
  • Use colmap ObservationManager for track filtering in glomap. by @B1ueber2y in colmap#3871
  • Centralize random logic to use colmap SetPRNGSeed. Add deterministic test. by @B1ueber2y in colmap#3879
  • Abstract general minimum spanning tree algorithm in colmap. by @B1ueber2y in colmap#3883
  • Use logging over std::cout in glomap to avoid flooding logs in gtest. by @B1ueber2y in colmap#3880
  • Abstract base option manager and consolidate usage. by @B1ueber2y in colmap#3881
  • [Improve RA] Move stratified logic into estimators and only keep one option class. by @B1ueber2y in colmap#3863
  • ImagePair inherits colmap::TwoViewGeometry. Remove image id fields. by @B1ueber2y in colmap#3882
  • Further cleanup of std::cout in the codebase. by @B1ueber2y in colmap#3884
  • Rename SwapImagePair to ShouldSwapImagePair. by @B1ueber2y in colmap#3887
  • Move validity logic into ViewGraph and use filter_view in ValidImagePairs. by @B1ueber2y in colmap#3885
  • Directly use COLMAP bundle adjustment interface for glomap BA. by @B1ueber2y in colmap#3868
  • Add rotation averaging controller in colmap and consolidate glomap exe functions. by @B1ueber2y in colmap#3888
  • Remove legacy logging in global positioning. by @B1ueber2y in colmap#3892
  • Minor: improve the namings in global mapper options. by @B1ueber2y in colmap#3891
  • Add type annotations to python example scripts by @ahojnnes in colmap#3889
  • Remove OptimizationBase and use colmap::GetEffectiveNumThreads(). by @B1ueber2y in colmap#3890
  • Simplify the logic and naming of reconstruction pruning. by @B1ueber2y in colmap#3886
  • Fix wrongly migrated cuda option in glomap. by @B1ueber2y in colmap#3895
  • Centralize poselib type conversion. by @B1ueber2y in colmap#3896
  • Drop weight support for different relative poses in rotation averaging. by @B1ueber2y in colmap#3897
  • Simplify colmap_io in glomap thanks to the unification. by @B1ueber2y in colmap#3900
  • Reduce code duplication in pycolmap MVS bindings by @sarlinpe in colmap#3899
  • Use colmap IterativeGlobalRefinement for retriangulation and refinement in glomap. by @B1ueber2y in colmap#3902
  • Drop support for Python 3.9 due to EOL by @ahojnnes in colmap#3910
  • Add single-thread deterministic test for global mapper and rotation averaging controller. by @B1ueber2y in colmap#3906
  • Replace the usage of inliers in ImagePair with inlier_matches. by @B1ueber2y in colmap#3909
  • Update global mapper signature to align with colmap::IncrementalMapper. by @B1ueber2y in colmap#3904
  • Implement AddAndRegisterDefaultEnumOption and propagate to codebase. by @B1ueber2y in colmap#3903
  • Cleanup unused method declaration in GlobalMapper. by @B1ueber2y in colmap#3912
  • Refactor view graph calibration. by @B1ueber2y in colmap#3911
  • Delete legacy Python scripts by @ahojnnes in colmap#3914
  • Add support for computing recall scores by @ahojnnes in colmap#3913
  • Add Python bindings for depth and normal maps, retire legacy scripts by @ahojnnes in colmap#3916
  • Update and improve formatting of pycolmap readme by @ahojnnes in colmap#3917
  • Add Python type checking for all code by @ahojnnes in colmap#3893
  • Recompute F from E in the top level of CalibrateViewGraph. by @B1ueber2y in colmap#3915
  • Make DatabaseCache::Load/Create args optional except database. by @B1ueber2y in colmap#3919
  • Use DatabaseCache to load reconstruction in glomap and remove the custom loader. by @B1ueber2y in colmap#3918
  • Bugfix for the rotation averaging CLI. by @B1ueber2y in colmap#3927
  • Drop database member in SfM controllers for better modularity and safety. by @B1ueber2y in colmap#3926
  • Add tests for reconstruction benchmark utils by @ahojnnes in colmap#3930
  • Use new optional typing by @ahojnnes in colmap#3931
  • Switch to colmap backend for two view re-estimation after view graph calibration. by @B1ueber2y in colmap#3923
  • Fix sign of GPS longitude from EXIF by @ahojnnes in colmap#3935
  • Fix camera prior loading in benchmark code. by @B1ueber2y in colmap#3933
  • Remove Database::Clone method by @ahojnnes in colmap#3929
  • Cleanup unused glomap includes by @ahojnnes in colmap#3937
  • Improved code for view graph calibration cost functions by @ahojnnes in colmap#3936
  • Move and type annotate model visualization example by @ahojnnes in colmap#3939
  • Move end to end regression test script and annotate types by @ahojnnes in colmap#3938
  • Delete more legacy Python scripts by @ahojnnes in colmap#3940
  • Move and type annotate flickr downloader by @ahojnnes in colmap#3941
  • Add option to evaluate self-calibration in reconstruction benchmark by @ahojnnes in colmap#3942
  • Use std::optional for cam2_from_cam1 in TwoViewGeometry. by @B1ueber2y in colmap#3932
  • Use custom two view options for global pipeline in automatic reconstructor. by @B1ueber2y in colmap#3943
  • Add tests for estimating multiple two view geometries and minor perf optimization by @ahojnnes in colmap#3947
  • Add tests for uncovered edge cases in polynomial solvers by @ahojnnes in colmap#3946
  • Add unit tests for export to various external reconstruction formats by @ahojnnes in colmap#3945
  • Only create QApplication or OpenGL context if needed by @ahojnnes in colmap#3944
  • Simplify CSVToVector and add tests by @ahojnnes in colmap#3953
  • Migrate glomap exe into colmap. by @B1ueber2y in colmap#3952
  • Add unit tests for colmap version helpers by @ahojnnes in colmap#3955
  • Use make_unique instead of new by @ahojnnes in colmap#3957
  • Early exit pycolmap windows build on errors by @ahojnnes in colmap#3958
  • Make view graph calibration a stand-alone estimator module on colmap::Database and add CLI. by @B1ueber2y in colmap#3951
  • Replace ImagePair with RelativePoseData and rename ViewGraph to PoseGraph. by @B1ueber2y in colmap#3954
  • Make rotation averaging work with reconstruction with frames unregistered. by @B1ueber2y in colmap#3949
  • Replace 3-level option names with 2-level names for INI compatibility. by @B1ueber2y in colmap#3962
  • Add test for reading/writing options from ini by @ahojnnes in colmap#3963
  • Add relative poses to DatabaseCache and update the signature of global mapper. by @B1ueber2y in colmap#3960
  • Move module-specific functional methods outside PoseGraph. by @B1ueber2y in colmap#3964
  • Add tests for file utils, use enum utils by @ahojnnes in colmap#3956
  • Always try to decompose relative poses at the start of global pipeline. by @B1ueber2y in colmap#3966
  • Add unit tests for incremental triangulator by @ahojnnes in colmap#3967
  • Bugfix in pose decomposition interface. Update pipeline tests. by @B1ueber2y in colmap#3969
  • Switch paths from std::string to std::filesystem::path by @sarlinpe in colmap#3901
  • Add option to synthesize sparse view graph by @ahojnnes in colmap#3968
  • Optionally include runtime benchmarks in main project by @ahojnnes in colmap#3970
  • Refactor and improve track establishment. by @B1ueber2y in colmap#3965
  • Inline track establishment logic into GlobalMapper. by @B1ueber2y in colmap#3972
  • Minor: inline gravity cost functor into gravity refinement. by @B1ueber2y in colmap#3973
  • Store two view geometries in correspondence graph by @ahojnnes in colmap#3975
  • Support custom SSL certificate locations by @ahojnnes in colmap#3976
  • Fix database merging and improve tests by @ahojnnes in colmap#3977
  • Support loading bitmaps with alpha channel by @ahojnnes in colmap#3978
  • Reorder fields of core data structs for better packing by @ahojnnes in colmap#3979
  • Add tests for reading/writing bitmaps in popular image formats. by @ahojnnes in colmap#3980
  • Fix includes in feature index/matcher by @ahojnnes in colmap#3982
  • Do not store inlier matches in pose graph by @ahojnnes in colmap#3981
  • Setup priors when loading database, filter watermarks when creating database cache from another cache by @ahojnnes in colmap#3983
  • Fix guided matching for calibrated non-linear cameras by @ahojnnes in colmap#3986
  • Clear and log OpenImageIO errors by @ahojnnes in colmap#3987
  • Misc view graph calibration and global mapper improvements by @ahojnnes in colmap#3985
  • Do not crash but return error on unknown sensor_from_rig poses in incremental mapper by @ahojnnes in colmap#3988
  • Consistent and improved logging of headings by @ahojnnes in colmap#3991
  • Fix faiss linker warning under MSVC by @ahojnnes in colmap#3994
  • Make E F H optional in TwoViewGeometry struct. by @B1ueber2y in colmap#3989
  • Update Python incremental pipeline to match C++ by @ahojnnes in colmap#3993
  • Improve Reconstruction::NumRegImages from O(N) to O(1) by @ahojnnes in colmap#3996
  • Reduce incremental mapper's minimum size for small models by @ahojnnes in colmap#3992
  • Switch to Python 3.11 in the PR build. Disable mypy for Python 3.10. by @B1ueber2y in colmap#3998
  • Add missing Python bindings by @ahojnnes in colmap#3997
  • Do not override test commands for Python 3.10 on windows. by @B1ueber2y in colmap#4000
  • Rename num_iterations_ba to ba_num_iterations for consistency by @ahojnnes in colmap#4001
  • Return std::optional from Bitmap::Exif* methods by @ahojnnes in colmap#4002
  • Use database in rotation averaging CLI. Add a python example for legacy format. by @B1ueber2y in colmap#3990
  • Cleanup some includes in sfm folder by @ahojnnes in colmap#4005
  • Switch paths from std::string to std::filesystem::path (continued) by @sarlinpe in colmap#4004
  • Remove dangling declaration of JoinPaths. by @B1ueber2y in colmap#4009
  • Make reconstruction clustering logic a stand-alone module by @lpanaf in colmap#4008
  • Switch to perform clustering on all registered frames by @lpanaf in colmap#4007
  • Add option to control refinement of points 3D in bundle adjuster by @ahojnnes in colmap#4012
  • Minor code improvement in triangulation estimator by @ahojnnes in colmap#4015
  • Add support for division camera models by @ahojnnes in colmap#4013
  • Add nominal tests on reconstruction accuracy for bundle adjustment. by @B1ueber2y in colmap#4019
  • Use colmap::BundleAdjustmentOptions in global pipeline and drop custom option class. by @B1ueber2y in colmap#4016
  • Add test for and fix bitmap jpeg quality setting by @ahojnnes in colmap#4025
  • Remove unimplemented GetFileSize function by @ahojnnes in colmap#4026
  • Drop experimental modes in global positioning. Add module signature and improve naming. by @B1ueber2y in colmap#3920
  • Add option to specify jpeg quality during undistortion by @ahojnnes in colmap#4027
  • Analytical Jacobians for reprojection error cost function with SimpleRadial cameras by @ahojnnes in colmap#4017
  • Fix backwards compatibility of reading database created before Jul 2023. by @B1ueber2y in colmap#4030
  • Bug fix for generalized absolute pose estimator. by @B1ueber2y in colmap#4031
  • Clear model outputs in all estimators and RANSACs by @ahojnnes in colmap#4032
  • Move undistortion controllers to controllers folder by @ahojnnes in colmap#4033
  • Remove the iterative logic for reconstruction clustering and use directly the strongly connected component by @lpanaf in colmap#4035
  • Add rig scale alignment support for the global pipeline. by @B1ueber2y in colmap#4038
  • Performance improvement on generalized absolute pose. by @B1ueber2y in colmap#4037
  • Bundle adjustment benchmark by @ahojnnes in colmap#4022
  • Add fisheye (equidistant) camera model by @lpanaf in colmap#4039
  • Store Rigid3/Sim3 params as single vector by @ahojnnes in colmap#4041
  • Move minimal solvers in estimators to sub-folder by @ahojnnes in colmap#4047
  • Move generalized absolute pose solver to sub-folder by @ahojnnes in colmap#4048
  • Use static Eigen array segment sizes in rotation averaging by @ahojnnes in colmap#4049
  • Single pose parameter block and angle axis for BA cost functions by @ahojnnes in colmap#4029
  • Automatically deep copy feature extraction/matching options by @ahojnnes in colmap#4051
  • Add test for rig verification and fixes by @ahojnnes in colmap#4052
  • Improve test coverage for image reader by @ahojnnes in colmap#4053
  • Abstract general bundle adjuster and solver summary. by @B1ueber2y in colmap#4042
  • Change test target names and file names by @ahojnnes in colmap#4034
  • Add nominal test and runtime benchmarking for global positioning. by @B1ueber2y in colmap#4050
  • Modularize cost functions by @ahojnnes in colmap#4054
  • Fix incorrect macOS install instruction by @sarlinpe in colmap#4055
  • Move glomap sources to colmap and replace glomap with colmap namespace by @ahojnnes in colmap#4057
  • Move motion averaging cost functions to sub-folder by @ahojnnes in colmap#4058
  • Move glomap Python bindings to colmap folder by @ahojnnes in colmap#4059
  • Add GLOMAP paper to list of citations by @ahojnnes in colmap#4060
  • Add test for reconstruction_clustering and sort cluster id by cluster size by @lpanaf in colmap#4003
  • Improve Fetzer cost implementation and tests by @ahojnnes in colmap#4061
  • Remove unused GetFileSize function by @ahojnnes in colmap#4064
  • Add function to read PLY mesh and add roundtrip tests by @ahojnnes in colmap#4065
  • Remove unused GLError function by @ahojnnes in colmap#4066
  • Modernize code using structured bindings by @ahojnnes in colmap#4067
  • Reuse sorting of initial images by @ahojnnes in colmap#4069
  • Clean up messy GPS conversion functionality by @ahojnnes in colmap#4063
  • Reuse code in camera by @ahojnnes in colmap#4068
  • Support static windows build with CUDA by @ahojnnes in colmap#4072
  • Use enum instead of #define in model viewer widget by @ahojnnes in colmap#4073
  • Extract some algorithmic logic from exe and add tests by @ahojnnes in colmap#4074
  • Cleanup outdated pycolmap deprecations by @ahojnnes in colmap#4081
  • Associate feature descriptors with type and propagate through pipeline and storage by @ahojnnes in colmap#4080
  • Fix pycolmap compiler warnings by @ahojnnes in colmap#4082
  • Update clang-format to 21.1.8 by @ahojnnes in colmap#4085
  • Update project dependencies by @ahojnnes in colmap#4086
  • Move instructions to build documentation to install.rst instead of root README by @ahojnnes in colmap#4091
  • Fix doc ordering for sphinx==0.9.1 by @sarlinpe in colmap#4092
  • Update to latest vcpkg by @ahojnnes in colmap#4075
  • Extract loading of random descriptors and sample randomly across images by @ahojnnes in colmap#4096
  • Fix duplicate word typos in observation manager and rig docstring. by @B1ueber2y in colmap#4097
  • Add LightGlue ONNX feature matching by @ahojnnes in colmap#4098
  • Improve incremental mapper/triangulator bindings by @ahojnnes in colmap#4101
  • Use native menu bar on Mac by @ahojnnes in colmap#4102
  • Avoid unnecessary copies by @ahojnnes in colmap#4103
  • Expose pycolmap.match_from_pairs to support custom pair matching on GPU by @samuelm2 in colmap#4056
  • Update onnxruntime FetchContent for ARM64 support by @johnnynunez in colmap#4106
  • Early exit incremental initialization if there are no points by @ahojnnes in colmap#4108
  • Fix incorrect propagation of incremental options in automatic reconstructor by @sarlinpe in colmap#4111
  • Fix triangulation angle computation in patch match sampling by @ahojnnes in colmap#4110
  • Correctly set the rpath in CMake by @sarlinpe in colmap#4114
  • Fix inverted units in ExifFocalLength metadata extraction by @MAX4ARCH in colmap#4113
  • Add vocab tree for ALIKED N16 rot feature by @ahojnnes in colmap#4119
  • Add track_length option in synthetic tooling and report ms/iter in BA benchmark. by @B1ueber2y in colmap#4118
  • Fix install destination for onnxruntime by @ahojnnes in colmap#4120
  • Read image orientation from EXIF and extract upright features by @sarlinpe in colmap#4122
  • Fix and improve documentation by @ahojnnes in colmap#4123
  • Optimize includes in MVS folder by @ahojnnes in colmap#4125
  • Follow-up fixes on EXIF auto-rotation by @sarlinpe in colmap#4126
  • Replace typedefs with using by @ahojnnes in colmap#4128
  • Add optional position prior support to RefineGeneralizedAbsolutePose by @ahojnnes in colmap#4129
  • Add Python bindings for feature extractor by @ahojnnes in colmap#4130
  • Add Python bindings for feature matcher by @ahojnnes in colmap#4131
  • Rotate LightGlue inputs based on gravity by @sarlinpe in colmap#4132
  • Fixing OpenGL profiles on Linux (Ubuntu 25.10) by @martin-pr in colmap#4133
  • Add pre-trained vocabulary tree for ALIKED N32 variant by @ahojnnes in colmap#4134
  • Untie circular dependency between feature and scene libraries by @ahojnnes in colmap#4135
  • Add tests for matcher cache by @ahojnnes in colmap#4136
  • Explicitly accept dragMoveEvent to fix broken drag-and-drop in Qt6 by @StonerLing in colmap#4139
  • Parse unregistered config options with warning instead of error by @StonerLing in colmap#4140
  • Revamp logging configuration and fix UI log sink formatting by @StonerLing in colmap#4141
  • Make view graph calibration a standalone module by @ahojnnes in colmap#4143
  • Refactor ONNX runtime configuration handling in CMake files by @whuaegeanse in colmap#4144
  • Relative pose decomposition operates in-memory on database cache by @ahojnnes in colmap#4146
  • Enforce compile-time type checking for option registration by @StonerLing in colmap#4148
  • Relax assertion for the global bundle adjustment by @lpanaf in colmap#4149
  • Expose more logging options in pycolmap by @ahojnnes in colmap#4150
  • Load keypoints for all images to database cache for triangulation by @B1ueber2y in colmap#4151
  • Add separate trial counter for structure-less registration by @B1ueber2y in colmap#4152
  • Fix the usage of filter_frames in FindNextImages by @B1ueber2y in colmap#4153
  • Read inputs in parallel in patch match by @ahojnnes in colmap#4154
  • Improved caching for faster and more reliable CI by @ahojnnes in colmap#4156
  • Add retries for more reliable file download by @ahojnnes in colmap#4157
  • Add support for building shared libraries by @ahojnnes in colmap#4158
  • Fix missing colmap namespace in file macro by @B1ueber2y in colmap#4159
  • Fix file THROW_CHECK_* macros from double evaluation of path expressions by @ahojnnes in colmap#4160
  • Fix empty patch match results on CUDA compute >= 100 (Blackwell GPUs) by @ahojnnes in colmap#4161
  • Add AGENTS.md file by @ahojnnes in colmap#4162
  • Fix docker action caching by @ahojnnes in colmap#4163
  • Add compiler caching for CUDA code by @ahojnnes in colmap#4164
  • Improve ONNX Runtime error handling and CUDA compatibility warnings by @StonerLing in colmap#4167
  • Add structureless fallback options to reconstruction widget by @ahojnnes in colmap#4168
  • Add multi-threading support for (LO)RANSAC loop by @ahojnnes in colmap#4169
  • Add missing estimate sub-folder sources to cmake project by @ahojnnes in colmap#4171
  • Improve bundle adjustment test coverage by @ahojnnes in colmap#4172
  • Improve test coverage for coordinate frame estimators by @ahojnnes in colmap#4173
  • Improve test coverage for MVS consistency graph by @ahojnnes in colmap#4174
  • Add tests for SPRT sampler by @ahojnnes in colmap#4175
  • Improve reconstruction test coverage by @ahojnnes in colmap#4176
  • Add tests for MVS model by @ahojnnes in colmap#4177
  • Add tests for incremental mapper by @ahojnnes in colmap#4178
  • Add tests for feature matching utils by @ahojnnes in colmap#4179
  • Expand meshing test coverage by @ahojnnes in colmap#4180
  • Expand pose_graph_test coverage by @ahojnnes in colmap#4181
  • Expand extractor_test coverage by @ahojnnes in colmap#4182
  • Expand matcher_test coverage by @ahojnnes in colmap#4183
  • Add more log options in GUI by @StonerLing in colmap#4186
  • Add test for EstimateManhattanWorldFrame by @ahojnnes in colmap#4187
  • Fix ONNX model path handling for Windows by converting to UTF-8 by @whuaegeanse in colmap#4188
  • Add tests for rotation averaging edge cases by @ahojnnes in colmap#4190
  • Add mesh texture mapping by @ahojnnes in colmap#4202
  • Update install instructions for conda to mention Mamba by @ahojnnes in colmap#4204
  • Homogenize undistorter options by @ahojnnes in colmap#4205
  • Add support for importing surface mesh in viewer by @ahojnnes in colmap#4207
  • Save memory by storing colors as uint8 instead of float32 by @ahojnnes in colmap#4210
  • Configure Delaunay meshing num_threads in automatic reconstruction, more logging by @ahojnnes in colmap#4211
  • Log image reader non-success status as warning by @ahojnnes in colmap#4212
  • Support drag-and-drop for PLY point cloud / surface mesh in viewer by @ahojnnes in colmap#4214
  • Fix broken panorama_sfm.py by @sarlinpe in colmap#4215
  • Add implementation of mesh simplification by @ahojnnes in colmap#4216
  • Tests for filtering logic for incremental mapping by @winterclincke in colmap#4219
  • Deduplicate SIFT tests by @ahojnnes in colmap#4220
  • Fix ONNX installation on Linux for lib64 target by @ahojnnes in colmap#4221
  • Misc safety improvements by @ahojnnes in colmap#4222
  • Improved test coverage for bitmap by @ahojnnes in colmap#4224
  • Fix 180-degree flipped solutions in gravity-aligned rotation averaging by @ahojnnes in colmap#4225
  • Improve docs regarding view graph calibrator in global pipeline by @B1ueber2y in colmap#4226
  • Remove legacy cluster_ids in the global pipeline by @B1ueber2y in colmap#4227
  • Fallback to BA CPU solver if GPU failed by @ahojnnes in colmap#4230
  • Log out BA failures as errors by @ahojnnes in colmap#4231
  • Fix dangling pointers in OptionManager after ResetOptions by @B1ueber2y in colmap#4232
  • Fix model_aligner crash by using new pose prior API by @B1ueber2y in colmap#4233
  • Prevent nested threading for ONNX by @ahojnnes in colmap#4235
  • Scale max_image_size proportionally by feature extractor type in quality presets by @ahojnnes in colmap#4236
  • Rename reconstruction clusterer command to model clusterer by @ahojnnes in colmap#4237
  • Fix CPU parallelization for ALIKED by @ahojnnes in colmap#4238
  • feat: Added global mapping bindings by @TannerGilbert in colmap#4228

COLMAP 3.13.0 (11/07/2025)

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)

COLMAP 3.12.6 (09/17/2025)

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.

COLMAP 3.12.5 (08/22/2025)

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.

COLMAP 3.12.4 (08/04/2025)

Bug Fixes

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

COLMAP 3.12.3 (07/16/2025)

Bug Fixes

  • Set correct version number

COLMAP 3.12.2 (07/16/2025)

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

COLMAP 3.12.1 (07/05/2025)

Bug Fixes

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

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)

COLMAP 3.11.1 (12/06/2024)

Bug Fixes

COLMAP 3.11.0 (11/28/2024)

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)

COLMAP 3.10 (07/23/2024)

COLMAP 3.9.1 (01/08/2024)

COLMAP 3.9 (01/06/2024)

COLMAP 3.8 (01/31/2023)

COLMAP 3.7 (01/26/2022)

COLMAP 3.6 (07/24/2020)

  • Improved robustness and faster incremental reconstruction process
  • Add image_deleter command to remove images from sparse model
  • Add image_filter command to filter bad registrations from sparse model
  • Add point_filtering command to filter sparse model point clouds
  • Add database_merger command to merge two databases, which is useful to parallelize matching across different machines
  • Add image_undistorter_standalone to enable undistorting images without a pre-existing full sparse model
  • Improved undistortion for fisheye cameras and FOV camera model
  • Support for masking input images in feature extraction stage
  • Improved HiDPI support in GUI for high-resolution monitors
  • Import sparse model when launching GUI from CLI
  • Faster CPU-based matching using approximate NN search
  • Support for bundle adjustment with fixed extrinsics
  • Support for fixing existing images when continuing reconstruction
  • Camera model colors in viewer can be customized
  • Support for latest GPU architectures in CUDA build
  • Support for writing sparse models in Python scripts
  • Scripts for building and running COLMAP in Docker
  • Many more bug fixes and improvements to code and documentation

COLMAP 3.5 (08/22/2018)

  • COLMAP is now released under the BSD license instead of the GPL
  • COLMAP is now installed as a library, whose headers can be included and libraries linked against from other C/C++ code
  • Add hierarchical mapper for parallelized reconstruction or large scenes
  • Add sparse and dense Delaunay meshing algorithms, which reconstruct a watertight surface using a graph cut on the Delaunay triangulation of the reconstructed sparse or dense point cloud
  • Improved robustness when merging different models
  • Improved pre-trained vocabulary trees available for download
  • Add COLMAP as a software entry under Linux desktop systems
  • Add support to compile COLMAP on ARM platforms
  • Add example Python script to read/write COLMAP database
  • Add region of interest (ROI) cropping in image undistortion
  • Several import bug fixes for spatial verification in image retrieval
  • Add more extensive continuous integration across more compilation scenarios
  • Many more bug fixes and improvements to code and documentation

COLMAP 3.4 (01/29/2018)

  • Unified command-line interface: The functionality of previous executables have been merged into the src/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
  • More complete depth and normal maps with larger patch sizes
  • Faster dense stereo computation by skipping rows/columns in patch match, improved random sampling in patch match, and faster bilateral NCC
  • Better high DPI screen support for the graphical user interface
  • Improved model viewer under Windows, which now requires Qt 5.4
  • Save computed two-view geometries in database
  • Images (keypoint/matches visualization, depth and normal maps) can now be saved from the graphical user interface
  • Support for PMVS format without sparse bundler file
  • Faster covariant feature detection
  • Many more bug fixes and improvements

COLMAP 3.3 (11/21/2017)

  • Add DSP (Domain Size Pooling) SIFT implementation. DSP-SIFT outperforms standard SIFT in most cases, as shown in "Comparative Evaluation of Hand-Crafted and Learned Local Features", Schoenberger et al., CVPR 2017
  • Improved parameters dense reconstruction of smaller models
  • Improved compile times due to various code optimizations
  • Add option to specify camera model in automatic reconstruction
  • Add new model orientation alignment based on upright image assumption
  • Improved numerical stability for generalized absolute pose solver
  • Support for image range specification in PMVS dense reconstruction format
  • Support for older Python versions in automatic build script
  • Fix OpenCV Fisheye camera model to exactly match OpenCV specifications

COLMAP 3.2 (9/2/2017)

  • Fully automatic cross-platform build script (Windows, Mac, Linux)
  • Add multi-GPU feature extraction if multiple CUDA devices are available
  • Configurable dimension and data type for vocabulary tree implementation
  • Add new sequential matching mode for image sequences with high frame-rate
  • Add generalized relative pose solver for multi-camera systems
  • Add sparse least absolute deviation solver
  • Add CPU/GPU options to automatic reconstruction tool
  • Add continuous integration system under Windows, Mac, Linux through Github
  • Many more bug fixes and improvements

COLMAP 3.1 (6/15/2017)

  • Add fast spatial verification to image retrieval module
  • Add binary file format for sparse models by default. Old text format still fully compatible and possible conversion in GUI and CLI
  • Add cross-platform little endian binary file reading and writing
  • Faster and less memory hungry stereo fusion by computing consistency on demand and possible limitation of image size in fusion
  • Simpler geometric stereo processing interface. Now geometric stereo output can be computed using a single pass
  • Faster and multi-architecture CUDA compilation
  • Add medium quality option in automatic reconstructor
  • Many more bug fixes and improvements

COLMAP 3.0 (5/22/2017)

  • Add automatic end-to-end reconstruction tool that automatically performs sparse and dense reconstruction on a given set of images
  • Add multi-GPU dense stereo if multiple CUDA devices are available
  • Add multi-GPU feature matching if multiple CUDA devices are available
  • Add Manhattan-world / gravity alignment using line detection
  • Add CUDA-based feature extraction useful for usage on clusters
  • Add CPU-based feature matching for machines without GPU
  • Add new THIN_PRISM_FISHEYE camera model with tangential/radial correction
  • Add binary to triangulate existing/empty sparse reconstruction
  • Add binary to print summary statistics about sparse reconstruction
  • Add transitive feature matching to transitively complete match graph
  • Improved scalability of dense reconstruction by using caching
  • More stable GPU-based feature matching with informative warnings
  • Faster vocabulary tree matching using dynamic scheduling in FLANN
  • Faster spatial feature matching using linear index instead of kd-tree
  • More stable camera undistortion using numerical Newton iteration
  • Improved option parsing with some backwards incompatible option renaming
  • Faster compile times by optimizing includes and CUDA flags
  • More stable view selection for small baseline scenario in dense reconstruction
  • Many more bug fixes and improvements

COLMAP 2.1 (12/7/2016)

  • Support to only index and match specific images in vocabulary tree matching
  • Support to perform image retrieval using vocabulary tree
  • Several bug fixes and improvements for multi-view stereo module
  • Improved Structure-from-Motion initialization strategy
  • Support to only reconstruct the scene using specific images in the database
  • Add support to merge two models using overlapping registered images
  • Add support to geo-register/align models using known camera locations
  • Support to only extract specific images in feature extraction module
  • Support for snapshot model export during reconstruction
  • Skip already undistorted images if they exist in output directory
  • Support to limit the number of features in image retrieval for improved speed
  • Miscellaneous bug fixes and improvements

COLMAP 2.0 (9/8/2016)

  • Implementation of dense reconstruction pipeline
  • Improved feature matching performance
  • New bundle adjuster for rigidly mounted multi-camera systems
  • New generalized absolute pose solver for multi-camera systems
  • New executable to extract colors from all images
  • Boost can now be linked in shared and static mode
  • Various bug fixes and performance improvements

COLMAP 1.1 (5/19/2016)

  • Implementation of state-of-the-art image retrieval system using Hamming embedding for vocabulary tree matching. This should lead to much improved matching results as compared to the previous implementation.
  • Guided matching as an optional functionality.
  • New demo datasets for download.
  • Automatically switch to PBA if supported by the project.
  • Implementation of EPNP solver for local pose optimization in RANSAC.
  • Add option to extract upright SIFT features.
  • Saving JPEGs in superb quality by default in export.
  • Add option to clear matches and inlier matches in the project.
  • New fisheye camera models, including the FOV camera model used by Google Project Tango (Thomas Schoeps).
  • Extended documentation based on user feedback.
  • Fixed typo in documentation (Thomas Schoeps).

COLMAP 1.0 (4/4/2016)

  • Initial release of COLMAP.