Changelog#
COLMAP 4.1.0 (06/26/2026)#
New Features#
Added Caspar, a GPU-accelerated bundle adjustment backend, selectable as an alternative to the default Ceres solver. Includes rig support, GPU device selection, and pycolmap bindings for choosing the bundle adjustment and mapper backends. Caspar is often 1-2 orders of magnitude faster than the Ceres CUDA backend for medium- to large-scale problems, leading to drastic speedups especially for the incremental mapper.
Added the spherical (equirectangular) camera models. This enables native reconstruction of 360 panoramic images and is generally faster but less accurate than rendering perspective views, as performed in the
panorama_sfmexample.Extended the
panorama_sfmexample to now convert perspective cameras back to equirectangular and added global mapping support.Added Enhanced Unified Camera Model (EUCM).
Added advancing-front surface reconstruction meshing.
Added support for extracting gravity pose priors from EXIF orientation tags.
Added
CamRayFromImgbearing-vector unprojection interface and bindings.Estimate separate
fx/fyin the p4pf solver for two-focal camera models.Added a new
versionCLI command to print the COLMAP version.Added
MVS_ENABLEDbuild option to compile without the MVS module.Added
GlobalMapper.keep_max_num_tracksoption to bound the number of established tracks.Added rotation averaging options to the GlobalMapper configuration.
Added pycolmap bindings for
ReprojectionErrorTypeand additional point filter methods.Added support for showing camera up vector in the viewer.
Replaced the GUI icons with Material Symbols (Apache 2.0).
Added keyboard shortcuts for model import/export in the GUI.
Improvements#
Accelerated the exhaustive matcher by using
IndexIVFScalarQuantizerinstead ofIndexIVFFlat.Accelerated extraction of colors through parallelization across all images.
Accelerated incremental triangulator through reused BFS allocations and simplified
merge_trials_.Added and updated sensor specs to the camera database.
Avoided a forced copy in
mvs::Image::SetBitmap.Support incremental
CorrespondenceGraphandObservationManagerconstruction, decouplingreg_statsfromObservationManager.Return
std::optionalfromBitmap::GetPixel/Interpolate*.Refit missing E/F/H in
MaybeDecomposeRelativePosesfor old databases.Inherit all bundle adjustment options in the global mapper.
Guard against frame mutation after reconstruction insertion via
FinalizeDataIds().Move semantics for
SetPoints2D(takePoint2Dvector by value).Conditional initialization of Google logging.
Numerous benchmarking improvements: live progress display,
--fastmode, better parallelism and per-step logging, per-dataset/overall summary rows, GT-covisibility-based filtering, and dynamic scheduling.Added compiler warning flags and a
WERRORoption to the pycolmap build.Robustified gravity-aligned rotation averaging against 180deg flips.
Clipping extreme pixels in fisheye undistortion.
Various tutorial and docstring improvements.
For other minor improvements, see the full list of changes below.
Bug Fixes#
Fix sequential matching hang with loop detection verification.
Fix SiftGPU device selection to include device 0.
Fix vocab tree selection in the UI.
Fix broken integration of SIFT features with the LightGlue matcher.
Fix
global_mapperpoint3D.errorunits formodel_analyzer.Fix
PoissonReconnum_threadshandling and undefined behavior.Fix
pycolmap.Database()abort on garbage collection.Fix Windows Unicode path handling in
Bitmap::Read/Bitmap::Write.Fix NaN failures in rotation averaging from non-PD Cholesky.
Fix rotation averaging crash with multi-image rigs.
Fix missing rig pose manifold in
RefineGeneralizedAbsolutePoseand only set the manifold when residuals exist.Fix applying
refine_sensor_from_rigto all stages of the global mapper.Fix
mesh_texturerocclusion check edge case.Fix SIGABRT in
RegisterNextStructureLessImagewhenNumRegImages < 2.Fix thread pool worker processes crashing on shutdown.
Fix onnxruntime DLL copy error in
Findonnxruntime.cmake.Change
std::filesystem::relativetolexically_relativeforNormalizePath.Fix crash in
AdjustGlobalBundleafter aggressive frame filtering.Fix stale
reg_stats/observation stats and add underflow guards in mapper bookkeeping, and clearnum_reg_images.Fix empty PatchMatch results on Blackwell GPUs (sm_100+).
Fix locale-dependent float parsing/formatting.
Fix thread oversubscription in the hierarchical mapper.
Fix mask usage log never printing in the feature writer thread.
Fix
pyceres.problemattribute onCeresBundleAdjusterfactory.Fix conditional Eigen alignment for the 3.4.0 pre-release version.
Fix optional access in guided matching.
Fix reading of dynamic matrices in the SQLite database.
Fix using the ALIKED feature extractor with pycolmap and ALIKED
min_scorekeypoint filtering.Fix various pycolmap and PoissonRecon installation/build issues.
Fix missing mesh simplification reset and duplicate sources.
Add destructor to
ModelViewerWidgetto callmakeCurrent().Fix checks in the
GpuMatconstructor.Add missing LightGlue matcher type to the GUI.
Log an error instead of crashing on unknown EXIF orientation.
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_mapperandautomatic_reconstructor --mapper GLOBALcommands. 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_pairsfor 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
AddPoint3Dwithpoint3D_id.Fixed several issues in database merging.
Fixed MVS workspace image downsizing.
Fixed pycolmap to respect
fix_existing_framesoption in the incremental pipeline.Fixed transcription of image IDs in reconstruction from database.
Fixed
BundleAdjustmentConfig::NumResidualsignoring point statistics.Fixed incorrect propagation of incremental options in automatic reconstructor.
Fixed triangulation angle computation in patch match sampling.
Fixed inverted units in
ExifFocalLengthmetadata 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 inFindNextImages.Fixed
model_alignercrash 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.
TwoViewGeometryfieldscam2_from_cam1,E,F,Hare nowstd::optional.Rigid3dandSim3dparameters stored as single vector. Userotation()andtranslation()accessor methods instead of direct member access.Bundle adjustment cost functors use single pose parameter blocks.
BundleAdjusternow returnsstd::shared_ptr<BundleAdjusterSummary>instead ofceres::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.
DatabaseCacheinitialization consolidated into a single options struct instead of scattered arguments.Switched paths from
std::stringtostd::filesystem::paththroughout the C++ codebase. Pythonpathlib.Pathobjects are now automatically converted. No breaking impact on the Python interface.
Full Change List (sorted temporally)#
Fix MSVC compatibility with
isnanby @nharbiso in colmap/colmap#3720Include v3.13 to legacy dropdown. by @B1ueber2y in colmap/colmap#3724
(bugfix) initializing added_two_view_geometry_options to false by @AlePuglisi in colmap/colmap#3727
Update the tag of the doc submodule to the latest commit. by @B1ueber2y in colmap/colmap#3729
Fix duplicated parameters for pycolmap.extract_features and fix pycolmap README. by @B1ueber2y in colmap/colmap#3728
Document how to speed up bundle adjustment by @StonerLing in colmap/colmap#3730
Fix reconstruction benchmark by @ahojnnes in colmap/colmap#3731
Remove doc submodule for easier maintenance. by @B1ueber2y in colmap/colmap#3732
Fix undefined behavior in feature match swapping by @ahojnnes in colmap/colmap#3733
Fix SVD computation in affine transform by @ahojnnes in colmap/colmap#3734
Fix random seed stability tests for incremental mapper by @ahojnnes in colmap/colmap#3735
Structure-less image registration using generalized relative pose estimator by @ahojnnes in colmap/colmap#2829
Add supernodal cholmod L1 solver support and more tests by @ahojnnes in colmap/colmap#3737
Add union-find implementation by @ahojnnes in colmap/colmap#3738
Add unit tests for base controller by @ahojnnes in colmap/colmap#3739
Add unit tests for PLY utils by @ahojnnes in colmap/colmap#3742
Inline SQLite3 utils in database implementation by @ahojnnes in colmap/colmap#3741
Allow reuse of cholesky decomposition in L1 solver by @ahojnnes in colmap/colmap#3743
Add unit tests for controller thread by @ahojnnes in colmap/colmap#3740
Add drag-and-drop folder support for model import in the GUI by @StonerLing in colmap/colmap#3744
Update to latest vcpkg by @ahojnnes in colmap/colmap#3745
Include instructions to update documentation after new releases by @chipironcin in colmap/colmap#3716
Remove unused CMake warning level variable by @ahojnnes in colmap/colmap#3747
Import of GLOMAP source code by @ahojnnes in colmap/colmap#3748
Correct the spelling of GeometricVerifier. by @B1ueber2y in colmap/colmap#3749
Update Windows ccache to 4.12.1 by @ahojnnes in colmap/colmap#3750
Remove custom glomap constants by @ahojnnes in colmap/colmap#3751
Remove unnecessary glomap Camera by @ahojnnes in colmap/colmap#3753
Misc code quality improvements for max spanning tree by @ahojnnes in colmap/colmap#3755
Configure clang-format for glomap code by @ahojnnes in colmap/colmap#3756
Support two view geometry with empty inlier matches in the database. by @B1ueber2y in colmap/colmap#3754
Modularize glomap libraries by @ahojnnes in colmap/colmap#3757
Use colmap reconstruction matchers in global mapper tests by @ahojnnes in colmap/colmap#3758
Fix WriteTwoViewGeometry when inlier matches are empty. by @B1ueber2y in colmap/colmap#3761
Add support for geometric verification given known reconstruction. by @B1ueber2y in colmap/colmap#3752
Enable glomap tests in CI by @ahojnnes in colmap/colmap#3759
Replace custom glomap Track with colmap Point3D by @ahojnnes in colmap/colmap#3762
Add missing option: FeatureMatching.skip_image_pairs_in_same_frame by @B1ueber2y in colmap/colmap#3765
Use fundamental/essential matrix utils from colmap by @ahojnnes in colmap/colmap#3768
Clean up redundant/unnecessary glomap rigid3d helper functions by @ahojnnes in colmap/colmap#3764
Add option to skip geometric verification at feature matching. by @B1ueber2y in colmap/colmap#3766
Fix missing colmap namespace in util/file.h macro. by @B1ueber2y in colmap/colmap#3770
Add missing header for the enum macros and remove colmap namespace. by @B1ueber2y in colmap/colmap#3771
Upgrade to latest vcpkg. by @B1ueber2y in colmap/colmap#3774
Add convenience method for filtering data by sensor type by @ahojnnes in colmap/colmap#3776
Cleanup redundant sqlite database merge implementation, consistent variable naming by @ahojnnes in colmap/colmap#3778
Add missing bindings for Bitmap and cleanup by @sarlinpe in colmap/colmap#3780
Set frame_id when reading database images by @ahojnnes in colmap/colmap#3779
Handle near zero matrices or identity transformations in gmock matchers by @ahojnnes in colmap/colmap#3782
Fix pycolmap to respect fix_existing_frames option by @S-o-T in colmap/colmap#3781
Add non-inserting FindIfExists to UnionFind by @B1ueber2y in colmap/colmap#3783
Use existing ceres function to stringify termination type by @ahojnnes in colmap/colmap#3784
Add convenience Python constructors for data_t/sensor_t by @ahojnnes in colmap/colmap#3785
Add utility function to compute Rigid3d origin by @ahojnnes in colmap/colmap#3773
Allow running glomap from colmap main executable by @ahojnnes in colmap/colmap#3769
Associate pose priors to generic sensor measurement data by @ahojnnes in colmap/colmap#3777
Enable compiler warnings as errors in GCC/CLang CI builds by @ahojnnes in colmap/colmap#3788
Remove debug log statement in db management widget by @ahojnnes in colmap/colmap#3789
Rename PosePrior::IsValid to HasPosition by @ahojnnes in https://github.com/colmap/colmap/pull/3786
Add gravity to pose prior by @ahojnnes in colmap/colmap#3787
Disable editing of images in database management widget by @ahojnnes in colmap/colmap#3792
Fix and simplify database pose prior migration by @ahojnnes in colmap/colmap#3791
Synthesize gravities and move pose prior noise synthesis by @ahojnnes in colmap/colmap#3795
Replace FreeImage with OpenImageIO by @ahojnnes in colmap/colmap#3459
Add support on adding camera/image with trivial rig/frame to reconstruction. by @B1ueber2y in colmap/colmap#3800
Rename HasTrivialFrame to IsRefInFrame. by @B1ueber2y in colmap/colmap#3801
Ensure that the rig has only one sensor at AddImageWithTrivialFrame. by @B1ueber2y in colmap/colmap#3802
Fix meta data cloning when cloning bitmap by @ahojnnes in colmap/colmap#3812
Remove unused includes in MVS image by @ahojnnes in colmap/colmap#3813
Create global mapper pipeline by @ahojnnes in colmap/colmap#3808
Fix stand-alone python visualizer. by @B1ueber2y in colmap/colmap#3816
Remove the deprecated read_write_model.py from colmap. by @B1ueber2y in colmap/colmap#3817
refactor: Replace OpenSqliteDatabase with Database::Open by @whuaegeanse in https://github.com/colmap/colmap/pull/3818
Replace glomap gravity info with pose prior by @ahojnnes in colmap/colmap#3794
Relax CUDA requirements in Python wheels by @sarlinpe in colmap/colmap#3799
Fix copying behaviors of empty bitmap. by @B1ueber2y in colmap/colmap#3823
Don’t build CUDA wheels for all Python versions in PRs by @sarlinpe in colmap/colmap#3824
Fix NumResiduals ignore point statistics and update test assertion by @whuaegeanse in colmap/colmap#3820
Add unit tests for MVS workspace by @ahojnnes in colmap/colmap#3825
Fix transcription of image IDs in reconstruction from database by @ahojnnes in colmap/colmap#3826
Towards removing custom glomap image class by @ahojnnes in colmap/colmap#3805
Add unit tests for MVS image by @ahojnnes in colmap/colmap#3828
Remove unused includes in MVS fusion by @ahojnnes in colmap/colmap#3829
Add simple integration test for MVS fusion by @ahojnnes in colmap/colmap#3830
Remove custom glomap image class by @ahojnnes in colmap/colmap#3835
Add integration tests for meshing, update poisson recon library to 18.75 by @ahojnnes in colmap/colmap#3834
Consolidate calculation of angle between vectors by @ahojnnes in colmap/colmap#3836
Clean up unused includes from geometry folder by @ahojnnes in colmap/colmap#3837
Clean up redundant glomap executable by @ahojnnes in colmap/colmap#3838
Update FAQ on dense stereo stage requirements by @The-Cyber-Captain in colmap/colmap#3840
Improve glomap cost function, add tests by @ahojnnes in colmap/colmap#3839
Refactor general cost function utils and add NormalPriorCost and NormalErrorCost. by @B1ueber2y in colmap/colmap#3843
Various improvements and fixes on glomap gravity impl. by @B1ueber2y in colmap/colmap#3844
Fix misleading logging for structure-less registration. by @B1ueber2y in colmap/colmap#3848
Remove glomap types_sfm.h and only include necessary headers. by @B1ueber2y in colmap/colmap#3849
Improvements and fixes on glomap two view geometry. by @B1ueber2y in colmap/colmap#3847
Move cluster id logic to top level and remove custom glomap Frame class. by @B1ueber2y in colmap/colmap#3850
Migrate glomap gravity utilities into colmap and add tests. by @B1ueber2y in colmap/colmap#3845
Move InlierThresholdOptions and remove unnecessary includes. by @B1ueber2y in colmap/colmap#3851
Minor: throw instead of LOG(ERROR) when SQLITE3_EXEC fails. by @B1ueber2y in colmap/colmap#3855
Add integration tests for image undistorters by @ahojnnes in colmap/colmap#3856
Pass database as pointer instead of reference in global mapper. Drop GlobalMapperResume. by @B1ueber2y in colmap/colmap#3846
Use colmap::Reconstruction instead of scattered variables in glomap. by @B1ueber2y in https://github.com/colmap/colmap/pull/3853
Use temporary storage for camera centers in global positioning. by @B1ueber2y in colmap/colmap#3854
Fix workspace image downsizing and improve tests by @ahojnnes in colmap/colmap#3857
Fix bitmap copy assignment test by @ahojnnes in colmap/colmap#3859
Add test for BitmapColor printing by @ahojnnes in colmap/colmap#3860
[Improve RA] Add PairConstraint, remove image_id_to_idx and improve naming/comments. by @B1ueber2y in colmap/colmap#3858
Add test for spatial verification in image retrieval, fix crash for invalid transformations by @ahojnnes in colmap/colmap#3862
Attempt to make visual index spatial verification tests deterministic by @ahojnnes in colmap/colmap#3870
Minor: rename glomap cost_function.h to cost_functions.h. by @B1ueber2y in colmap/colmap#3872
Fix 2D association issue at AddPoint3D with point3D_id. by @B1ueber2y in colmap/colmap#3867
[Improve RA] Abstract RotationAveragingProblem and RotationAveragingSolver. by @B1ueber2y in colmap/colmap#3861
Move relative pose filtering utilities into ViewGraph. by @B1ueber2y in colmap/colmap#3864
Fix database race conditions in mapping pipelines by @ahojnnes in colmap/colmap#3865
Improve stability of visual index spatial verification test by @ahojnnes in colmap/colmap#3874
Fix glomap track retriangulation refinement termination status by @ahojnnes in colmap/colmap#3873
Propagate exceptions from ThreadPool::Wait by @ahojnnes in https://github.com/colmap/colmap/pull/3869
Catch AggregateException for ThreadPool. by @B1ueber2y in colmap/colmap#3875
Use DeRegisterFrame over ResetPose in view graph and track retriangulation. by @B1ueber2y in colmap/colmap#3877
Add Reconstruction::IsValid to check if a reconstruction object is not broken. by @B1ueber2y in https://github.com/colmap/colmap/pull/3878
Improve the horrendous logic and naming in rotation initializer. by @B1ueber2y in colmap/colmap#3876
Use colmap ObservationManager for track filtering in glomap. by @B1ueber2y in colmap/colmap#3871
Centralize random logic to use colmap SetPRNGSeed. Add deterministic test. by @B1ueber2y in colmap/colmap#3879
Abstract general minimum spanning tree algorithm in colmap. by @B1ueber2y in colmap/colmap#3883
Use logging over std::cout in glomap to avoid flooding logs in gtest. by @B1ueber2y in https://github.com/colmap/colmap/pull/3880
Abstract base option manager and consolidate usage. by @B1ueber2y in colmap/colmap#3881
[Improve RA] Move stratified logic into estimators and only keep one option class. by @B1ueber2y in colmap/colmap#3863
ImagePair inherits colmap::TwoViewGeometry. Remove image id fields. by @B1ueber2y in https://github.com/colmap/colmap/pull/3882
Further cleanup of std::cout in the codebase. by @B1ueber2y in https://github.com/colmap/colmap/pull/3884
Rename SwapImagePair to ShouldSwapImagePair. by @B1ueber2y in colmap/colmap#3887
Move validity logic into ViewGraph and use filter_view in ValidImagePairs. by @B1ueber2y in colmap/colmap#3885
Directly use COLMAP bundle adjustment interface for glomap BA. by @B1ueber2y in colmap/colmap#3868
Add rotation averaging controller in colmap and consolidate glomap exe functions. by @B1ueber2y in colmap/colmap#3888
Remove legacy logging in global positioning. by @B1ueber2y in colmap/colmap#3892
Minor: improve the namings in global mapper options. by @B1ueber2y in colmap/colmap#3891
Add type annotations to python example scripts by @ahojnnes in colmap/colmap#3889
Remove OptimizationBase and use colmap::GetEffectiveNumThreads(). by @B1ueber2y in colmap/colmap#3890
Simplify the logic and naming of reconstruction pruning. by @B1ueber2y in colmap/colmap#3886
Fix wrongly migrated cuda option in glomap. by @B1ueber2y in colmap/colmap#3895
Centralize poselib type conversion. by @B1ueber2y in colmap/colmap#3896
Drop weight support for different relative poses in rotation averaging. by @B1ueber2y in colmap/colmap#3897
Simplify colmap_io in glomap thanks to the unification. by @B1ueber2y in colmap/colmap#3900
Reduce code duplication in pycolmap MVS bindings by @sarlinpe in colmap/colmap#3899
Use colmap IterativeGlobalRefinement for retriangulation and refinement in glomap. by @B1ueber2y in colmap/colmap#3902
Drop support for Python 3.9 due to EOL by @ahojnnes in colmap/colmap#3910
Add single-thread deterministic test for global mapper and rotation averaging controller. by @B1ueber2y in colmap/colmap#3906
Replace the usage of inliers in ImagePair with inlier_matches. by @B1ueber2y in colmap/colmap#3909
Update global mapper signature to align with colmap::IncrementalMapper. by @B1ueber2y in https://github.com/colmap/colmap/pull/3904
Implement AddAndRegisterDefaultEnumOption and propagate to codebase. by @B1ueber2y in colmap/colmap#3903
Cleanup unused method declaration in GlobalMapper. by @B1ueber2y in colmap/colmap#3912
Refactor view graph calibration. by @B1ueber2y in colmap/colmap#3911
Delete legacy Python scripts by @ahojnnes in colmap/colmap#3914
Add support for computing recall scores by @ahojnnes in colmap/colmap#3913
Add Python bindings for depth and normal maps, retire legacy scripts by @ahojnnes in colmap/colmap#3916
Update and improve formatting of pycolmap readme by @ahojnnes in colmap/colmap#3917
Add Python type checking for all code by @ahojnnes in colmap/colmap#3893
Recompute F from E in the top level of CalibrateViewGraph. by @B1ueber2y in colmap/colmap#3915
Make DatabaseCache::Load/Create args optional except database. by @B1ueber2y in https://github.com/colmap/colmap/pull/3919
Use DatabaseCache to load reconstruction in glomap and remove the custom loader. by @B1ueber2y in colmap/colmap#3918
Bugfix for the rotation averaging CLI. by @B1ueber2y in colmap/colmap#3927
Drop database member in SfM controllers for better modularity and safety. by @B1ueber2y in colmap/colmap#3926
Add tests for reconstruction benchmark utils by @ahojnnes in colmap/colmap#3930
Use new optional typing by @ahojnnes in colmap/colmap#3931
Switch to colmap backend for two view re-estimation after view graph calibration. by @B1ueber2y in colmap/colmap#3923
Fix sign of GPS longitude from EXIF by @ahojnnes in colmap/colmap#3935
Fix camera prior loading in benchmark code. by @B1ueber2y in colmap/colmap#3933
Remove Database::Clone method by @ahojnnes in https://github.com/colmap/colmap/pull/3929
Cleanup unused glomap includes by @ahojnnes in colmap/colmap#3937
Improved code for view graph calibration cost functions by @ahojnnes in colmap/colmap#3936
Move and type annotate model visualization example by @ahojnnes in colmap/colmap#3939
Move end to end regression test script and annotate types by @ahojnnes in colmap/colmap#3938
Delete more legacy Python scripts by @ahojnnes in colmap/colmap#3940
Move and type annotate flickr downloader by @ahojnnes in colmap/colmap#3941
Add option to evaluate self-calibration in reconstruction benchmark by @ahojnnes in colmap/colmap#3942
Use std::optional for cam2_from_cam1 in TwoViewGeometry. by @B1ueber2y in https://github.com/colmap/colmap/pull/3932
Use custom two view options for global pipeline in automatic reconstructor. by @B1ueber2y in colmap/colmap#3943
Add tests for estimating multiple two view geometries and minor perf optimization by @ahojnnes in colmap/colmap#3947
Add tests for uncovered edge cases in polynomial solvers by @ahojnnes in colmap/colmap#3946
Add unit tests for export to various external reconstruction formats by @ahojnnes in colmap/colmap#3945
Only create QApplication or OpenGL context if needed by @ahojnnes in colmap/colmap#3944
Simplify CSVToVector and add tests by @ahojnnes in colmap/colmap#3953
Migrate glomap exe into colmap. by @B1ueber2y in colmap/colmap#3952
Add unit tests for colmap version helpers by @ahojnnes in colmap/colmap#3955
Use make_unique instead of new by @ahojnnes in colmap/colmap#3957
Early exit pycolmap windows build on errors by @ahojnnes in colmap/colmap#3958
Make view graph calibration a stand-alone estimator module on colmap::Database and add CLI. by @B1ueber2y in https://github.com/colmap/colmap/pull/3951
Replace ImagePair with RelativePoseData and rename ViewGraph to PoseGraph. by @B1ueber2y in colmap/colmap#3954
Make rotation averaging work with reconstruction with frames unregistered. by @B1ueber2y in colmap/colmap#3949
Replace 3-level option names with 2-level names for INI compatibility. by @B1ueber2y in colmap/colmap#3962
Add test for reading/writing options from ini by @ahojnnes in colmap/colmap#3963
Add relative poses to DatabaseCache and update the signature of global mapper. by @B1ueber2y in colmap/colmap#3960
Move module-specific functional methods outside PoseGraph. by @B1ueber2y in colmap/colmap#3964
Add tests for file utils, use enum utils by @ahojnnes in colmap/colmap#3956
Always try to decompose relative poses at the start of global pipeline. by @B1ueber2y in colmap/colmap#3966
Add unit tests for incremental triangulator by @ahojnnes in colmap/colmap#3967
Bugfix in pose decomposition interface. Update pipeline tests. by @B1ueber2y in colmap/colmap#3969
Switch paths from std::string to std::filesystem::path by @sarlinpe in https://github.com/colmap/colmap/pull/3901
Add option to synthesize sparse view graph by @ahojnnes in colmap/colmap#3968
Optionally include runtime benchmarks in main project by @ahojnnes in colmap/colmap#3970
Refactor and improve track establishment. by @B1ueber2y in colmap/colmap#3965
Inline track establishment logic into GlobalMapper. by @B1ueber2y in colmap/colmap#3972
Minor: inline gravity cost functor into gravity refinement. by @B1ueber2y in colmap/colmap#3973
Store two view geometries in correspondence graph by @ahojnnes in colmap/colmap#3975
Support custom SSL certificate locations by @ahojnnes in colmap/colmap#3976
Fix database merging and improve tests by @ahojnnes in colmap/colmap#3977
Support loading bitmaps with alpha channel by @ahojnnes in colmap/colmap#3978
Reorder fields of core data structs for better packing by @ahojnnes in colmap/colmap#3979
Add tests for reading/writing bitmaps in popular image formats. by @ahojnnes in colmap/colmap#3980
Fix includes in feature index/matcher by @ahojnnes in colmap/colmap#3982
Do not store inlier matches in pose graph by @ahojnnes in colmap/colmap#3981
Setup priors when loading database, filter watermarks when creating database cache from another cache by @ahojnnes in colmap/colmap#3983
Fix guided matching for calibrated non-linear cameras by @ahojnnes in colmap/colmap#3986
Clear and log OpenImageIO errors by @ahojnnes in colmap/colmap#3987
Misc view graph calibration and global mapper improvements by @ahojnnes in colmap/colmap#3985
Do not crash but return error on unknown sensor_from_rig poses in incremental mapper by @ahojnnes in colmap/colmap#3988
Consistent and improved logging of headings by @ahojnnes in colmap/colmap#3991
Fix faiss linker warning under MSVC by @ahojnnes in colmap/colmap#3994
Make E F H optional in TwoViewGeometry struct. by @B1ueber2y in colmap/colmap#3989
Update Python incremental pipeline to match C++ by @ahojnnes in colmap/colmap#3993
Improve Reconstruction::NumRegImages from O(N) to O(1) by @ahojnnes in https://github.com/colmap/colmap/pull/3996
Reduce incremental mapper’s minimum size for small models by @ahojnnes in colmap/colmap#3992
Switch to Python 3.11 in the PR build. Disable mypy for Python 3.10. by @B1ueber2y in colmap/colmap#3998
Add missing Python bindings by @ahojnnes in colmap/colmap#3997
Do not override test commands for Python 3.10 on windows. by @B1ueber2y in colmap/colmap#4000
Rename num_iterations_ba to ba_num_iterations for consistency by @ahojnnes in colmap/colmap#4001
Return std::optional from Bitmap::Exif* methods by @ahojnnes in https://github.com/colmap/colmap/pull/4002
Use database in rotation averaging CLI. Add a python example for legacy format. by @B1ueber2y in colmap/colmap#3990
Cleanup some includes in sfm folder by @ahojnnes in colmap/colmap#4005
Switch paths from std::string to std::filesystem::path (continued) by @sarlinpe in https://github.com/colmap/colmap/pull/4004
Remove dangling declaration of JoinPaths. by @B1ueber2y in colmap/colmap#4009
Make reconstruction clustering logic a stand-alone module by @lpanaf in colmap/colmap#4008
Switch to perform clustering on all registered frames by @lpanaf in colmap/colmap#4007
Add option to control refinement of points 3D in bundle adjuster by @ahojnnes in colmap/colmap#4012
Minor code improvement in triangulation estimator by @ahojnnes in colmap/colmap#4015
Add support for division camera models by @ahojnnes in colmap/colmap#4013
Add nominal tests on reconstruction accuracy for bundle adjustment. by @B1ueber2y in colmap/colmap#4019
Use colmap::BundleAdjustmentOptions in global pipeline and drop custom option class. by @B1ueber2y in https://github.com/colmap/colmap/pull/4016
Add test for and fix bitmap jpeg quality setting by @ahojnnes in colmap/colmap#4025
Remove unimplemented GetFileSize function by @ahojnnes in colmap/colmap#4026
Drop experimental modes in global positioning. Add module signature and improve naming. by @B1ueber2y in colmap/colmap#3920
Add option to specify jpeg quality during undistortion by @ahojnnes in colmap/colmap#4027
Analytical Jacobians for reprojection error cost function with SimpleRadial cameras by @ahojnnes in colmap/colmap#4017
Fix backwards compatibility of reading database created before Jul 2023. by @B1ueber2y in colmap/colmap#4030
Bug fix for generalized absolute pose estimator. by @B1ueber2y in colmap/colmap#4031
Clear model outputs in all estimators and RANSACs by @ahojnnes in colmap/colmap#4032
Move undistortion controllers to controllers folder by @ahojnnes in colmap/colmap#4033
Remove the iterative logic for reconstruction clustering and use directly the strongly connected component by @lpanaf in colmap/colmap#4035
Add rig scale alignment support for the global pipeline. by @B1ueber2y in colmap/colmap#4038
Performance improvement on generalized absolute pose. by @B1ueber2y in colmap/colmap#4037
Bundle adjustment benchmark by @ahojnnes in colmap/colmap#4022
Add fisheye (equidistant) camera model by @lpanaf in colmap/colmap#4039
Store Rigid3/Sim3 params as single vector by @ahojnnes in colmap/colmap#4041
Move minimal solvers in estimators to sub-folder by @ahojnnes in colmap/colmap#4047
Move generalized absolute pose solver to sub-folder by @ahojnnes in colmap/colmap#4048
Use static Eigen array segment sizes in rotation averaging by @ahojnnes in colmap/colmap#4049
Single pose parameter block and angle axis for BA cost functions by @ahojnnes in colmap/colmap#4029
Automatically deep copy feature extraction/matching options by @ahojnnes in colmap/colmap#4051
Add test for rig verification and fixes by @ahojnnes in colmap/colmap#4052
Improve test coverage for image reader by @ahojnnes in colmap/colmap#4053
Abstract general bundle adjuster and solver summary. by @B1ueber2y in colmap/colmap#4042
Change test target names and file names by @ahojnnes in colmap/colmap#4034
Add nominal test and runtime benchmarking for global positioning. by @B1ueber2y in colmap/colmap#4050
Modularize cost functions by @ahojnnes in colmap/colmap#4054
Fix incorrect macOS install instruction by @sarlinpe in colmap/colmap#4055
Move glomap sources to colmap and replace glomap with colmap namespace by @ahojnnes in colmap/colmap#4057
Move motion averaging cost functions to sub-folder by @ahojnnes in colmap/colmap#4058
Move glomap Python bindings to colmap folder by @ahojnnes in colmap/colmap#4059
Add GLOMAP paper to list of citations by @ahojnnes in colmap/colmap#4060
Add test for reconstruction_clustering and sort cluster id by cluster size by @lpanaf in colmap/colmap#4003
Improve Fetzer cost implementation and tests by @ahojnnes in colmap/colmap#4061
Remove unused GetFileSize function by @ahojnnes in colmap/colmap#4064
Add function to read PLY mesh and add roundtrip tests by @ahojnnes in colmap/colmap#4065
Remove unused GLError function by @ahojnnes in colmap/colmap#4066
Modernize code using structured bindings by @ahojnnes in colmap/colmap#4067
Reuse sorting of initial images by @ahojnnes in colmap/colmap#4069
Clean up messy GPS conversion functionality by @ahojnnes in colmap/colmap#4063
Reuse code in camera by @ahojnnes in colmap/colmap#4068
Support static windows build with CUDA by @ahojnnes in colmap/colmap#4072
Use enum instead of #define in model viewer widget by @ahojnnes in colmap/colmap#4073
Extract some algorithmic logic from exe and add tests by @ahojnnes in colmap/colmap#4074
Cleanup outdated pycolmap deprecations by @ahojnnes in colmap/colmap#4081
Associate feature descriptors with type and propagate through pipeline and storage by @ahojnnes in colmap/colmap#4080
Fix pycolmap compiler warnings by @ahojnnes in colmap/colmap#4082
Update clang-format to 21.1.8 by @ahojnnes in colmap/colmap#4085
Update project dependencies by @ahojnnes in colmap/colmap#4086
Move instructions to build documentation to install.rst instead of root README by @ahojnnes in colmap/colmap#4091
Fix doc ordering for sphinx==0.9.1 by @sarlinpe in colmap/colmap#4092
Update to latest vcpkg by @ahojnnes in colmap/colmap#4075
Extract loading of random descriptors and sample randomly across images by @ahojnnes in colmap/colmap#4096
Fix duplicate word typos in observation manager and rig docstring. by @B1ueber2y in colmap/colmap#4097
Add LightGlue ONNX feature matching by @ahojnnes in colmap/colmap#4098
Improve incremental mapper/triangulator bindings by @ahojnnes in colmap/colmap#4101
Use native menu bar on Mac by @ahojnnes in colmap/colmap#4102
Avoid unnecessary copies by @ahojnnes in colmap/colmap#4103
Expose pycolmap.match_from_pairs to support custom pair matching on GPU by @samuelm2 in colmap/colmap#4056
Update onnxruntime FetchContent for ARM64 support by @johnnynunez in colmap/colmap#4106
Early exit incremental initialization if there are no points by @ahojnnes in colmap/colmap#4108
Fix incorrect propagation of incremental options in automatic reconstructor by @sarlinpe in colmap/colmap#4111
Fix triangulation angle computation in patch match sampling by @ahojnnes in colmap/colmap#4110
Correctly set the rpath in CMake by @sarlinpe in colmap/colmap#4114
Fix inverted units in ExifFocalLength metadata extraction by @MAX4ARCH in colmap/colmap#4113
Add vocab tree for ALIKED N16 rot feature by @ahojnnes in colmap/colmap#4119
Add track_length option in synthetic tooling and report ms/iter in BA benchmark. by @B1ueber2y in colmap/colmap#4118
Fix install destination for onnxruntime by @ahojnnes in colmap/colmap#4120
Read image orientation from EXIF and extract upright features by @sarlinpe in colmap/colmap#4122
Fix and improve documentation by @ahojnnes in colmap/colmap#4123
Optimize includes in MVS folder by @ahojnnes in colmap/colmap#4125
Follow-up fixes on EXIF auto-rotation by @sarlinpe in colmap/colmap#4126
Replace typedefs with using by @ahojnnes in colmap/colmap#4128
Add optional position prior support to RefineGeneralizedAbsolutePose by @ahojnnes in colmap/colmap#4129
Add Python bindings for feature extractor by @ahojnnes in colmap/colmap#4130
Add Python bindings for feature matcher by @ahojnnes in colmap/colmap#4131
Rotate LightGlue inputs based on gravity by @sarlinpe in colmap/colmap#4132
Fixing OpenGL profiles on Linux (Ubuntu 25.10) by @martin-pr in colmap/colmap#4133
Add pre-trained vocabulary tree for ALIKED N32 variant by @ahojnnes in colmap/colmap#4134
Untie circular dependency between feature and scene libraries by @ahojnnes in colmap/colmap#4135
Add tests for matcher cache by @ahojnnes in colmap/colmap#4136
Explicitly accept dragMoveEvent to fix broken drag-and-drop in Qt6 by @StonerLing in colmap/colmap#4139
Parse unregistered config options with warning instead of error by @StonerLing in colmap/colmap#4140
Revamp logging configuration and fix UI log sink formatting by @StonerLing in colmap/colmap#4141
Make view graph calibration a standalone module by @ahojnnes in colmap/colmap#4143
Refactor ONNX runtime configuration handling in CMake files by @whuaegeanse in colmap/colmap#4144
Relative pose decomposition operates in-memory on database cache by @ahojnnes in colmap/colmap#4146
Enforce compile-time type checking for option registration by @StonerLing in colmap/colmap#4148
Relax assertion for the global bundle adjustment by @lpanaf in colmap/colmap#4149
Expose more logging options in pycolmap by @ahojnnes in colmap/colmap#4150
Load keypoints for all images to database cache for triangulation by @B1ueber2y in colmap/colmap#4151
Add separate trial counter for structure-less registration by @B1ueber2y in colmap/colmap#4152
Fix the usage of filter_frames in FindNextImages by @B1ueber2y in colmap/colmap#4153
Read inputs in parallel in patch match by @ahojnnes in colmap/colmap#4154
Improved caching for faster and more reliable CI by @ahojnnes in colmap/colmap#4156
Add retries for more reliable file download by @ahojnnes in colmap/colmap#4157
Add support for building shared libraries by @ahojnnes in colmap/colmap#4158
Fix missing colmap namespace in file macro by @B1ueber2y in colmap/colmap#4159
Fix file THROW_CHECK_* macros from double evaluation of path expressions by @ahojnnes in colmap/colmap#4160
Fix empty patch match results on CUDA compute >= 100 (Blackwell GPUs) by @ahojnnes in colmap/colmap#4161
Add AGENTS.md file by @ahojnnes in colmap/colmap#4162
Fix docker action caching by @ahojnnes in colmap/colmap#4163
Add compiler caching for CUDA code by @ahojnnes in colmap/colmap#4164
Improve ONNX Runtime error handling and CUDA compatibility warnings by @StonerLing in colmap/colmap#4167
Add structureless fallback options to reconstruction widget by @ahojnnes in colmap/colmap#4168
Add multi-threading support for (LO)RANSAC loop by @ahojnnes in colmap/colmap#4169
Add missing estimate sub-folder sources to cmake project by @ahojnnes in colmap/colmap#4171
Improve bundle adjustment test coverage by @ahojnnes in colmap/colmap#4172
Improve test coverage for coordinate frame estimators by @ahojnnes in colmap/colmap#4173
Improve test coverage for MVS consistency graph by @ahojnnes in colmap/colmap#4174
Add tests for SPRT sampler by @ahojnnes in colmap/colmap#4175
Improve reconstruction test coverage by @ahojnnes in colmap/colmap#4176
Add tests for MVS model by @ahojnnes in colmap/colmap#4177
Add tests for incremental mapper by @ahojnnes in colmap/colmap#4178
Add tests for feature matching utils by @ahojnnes in colmap/colmap#4179
Expand meshing test coverage by @ahojnnes in colmap/colmap#4180
Expand pose_graph_test coverage by @ahojnnes in colmap/colmap#4181
Expand extractor_test coverage by @ahojnnes in colmap/colmap#4182
Expand matcher_test coverage by @ahojnnes in colmap/colmap#4183
Add more log options in GUI by @StonerLing in colmap/colmap#4186
Add test for EstimateManhattanWorldFrame by @ahojnnes in colmap/colmap#4187
Fix ONNX model path handling for Windows by converting to UTF-8 by @whuaegeanse in colmap/colmap#4188
Add tests for rotation averaging edge cases by @ahojnnes in colmap/colmap#4190
Add mesh texture mapping by @ahojnnes in colmap/colmap#4202
Update install instructions for conda to mention Mamba by @ahojnnes in colmap/colmap#4204
Homogenize undistorter options by @ahojnnes in colmap/colmap#4205
Add support for importing surface mesh in viewer by @ahojnnes in colmap/colmap#4207
Save memory by storing colors as uint8 instead of float32 by @ahojnnes in colmap/colmap#4210
Configure Delaunay meshing num_threads in automatic reconstruction, more logging by @ahojnnes in colmap/colmap#4211
Log image reader non-success status as warning by @ahojnnes in colmap/colmap#4212
Support drag-and-drop for PLY point cloud / surface mesh in viewer by @ahojnnes in colmap/colmap#4214
Fix broken panorama_sfm.py by @sarlinpe in colmap/colmap#4215
Add implementation of mesh simplification by @ahojnnes in colmap/colmap#4216
Tests for filtering logic for incremental mapping by @winterclincke in colmap/colmap#4219
Deduplicate SIFT tests by @ahojnnes in colmap/colmap#4220
Fix ONNX installation on Linux for lib64 target by @ahojnnes in colmap/colmap#4221
Misc safety improvements by @ahojnnes in colmap/colmap#4222
Improved test coverage for bitmap by @ahojnnes in colmap/colmap#4224
Fix 180-degree flipped solutions in gravity-aligned rotation averaging by @ahojnnes in colmap/colmap#4225
Improve docs regarding view graph calibrator in global pipeline by @B1ueber2y in colmap/colmap#4226
Remove legacy cluster_ids in the global pipeline by @B1ueber2y in colmap/colmap#4227
Fallback to BA CPU solver if GPU failed by @ahojnnes in colmap/colmap#4230
Log out BA failures as errors by @ahojnnes in colmap/colmap#4231
Fix dangling pointers in OptionManager after ResetOptions by @B1ueber2y in colmap/colmap#4232
Fix model_aligner crash by using new pose prior API by @B1ueber2y in colmap/colmap#4233
Prevent nested threading for ONNX by @ahojnnes in colmap/colmap#4235
Scale max_image_size proportionally by feature extractor type in quality presets by @ahojnnes in colmap/colmap#4236
Rename reconstruction clusterer command to model clusterer by @ahojnnes in colmap/colmap#4237
Fix CPU parallelization for ALIKED by @ahojnnes in colmap/colmap#4238
feat: Added global mapping bindings by @TannerGilbert in colmap/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)#
Autoselect compatible nvidia for docker by @MasahiroOgawa in colmap/colmap#3454
Add 3.12.1 changelog to main by @ahojnnes in colmap/colmap#3461
Add min_num_neighbors constraint for spatial matching by @StonerLing in colmap/colmap#3463
Refactor feature extraction/matching to support other features by @ahojnnes in colmap/colmap#3465
Define VisualIndex::Read as static in python bindings by @ahojnnes in https://github.com/colmap/colmap/pull/3467
Only find C/CXX OpenMP components by @ahojnnes in colmap/colmap#3469
Remove unnecessary GPU checks in pycolmap by @sarlinpe in colmap/colmap#3472
Fix a bug affecting feature matching on GPU by @sarlinpe in colmap/colmap#3473
Add command line option for TwoViewGeometry.detect_watermark by @gareth-cross in colmap/colmap#3476
Add and test GetRelativePath by @sarlinpe in colmap/colmap#3475
Update GetPathBaseName to rely on std::filesystem by @sarlinpe in https://github.com/colmap/colmap/pull/3481
Fix potential deadlock in job queue by @huluoboge in colmap/colmap#3480
Update FindMetis.cmake to also link GK_LIBRARIES by @yeicor in colmap/colmap#3470
Remove check in database_cache.cc that breaks backwards compatibility with image_list_file_path by @pd-karoly-harsanyi in colmap/colmap#3478
Fix docker run script for GUI by @MasahiroOgawa in colmap/colmap#3483
Ensure UTF-8 encoding for database paths passed to SQLite open by @StonerLing in colmap/colmap#3482
Add changelog for 3.12.2 release by @ahojnnes in colmap/colmap#3488
Add changelog for 3.12.3 release by @ahojnnes in colmap/colmap#3490
Fix BundleAdjustmentConfig::SetConstantRigFromWorldPose by @whuaegeanse in https://github.com/colmap/colmap/pull/3501
Add random_seed option to RANSACOptions for reproducible TwoViewGeometry estimation by @StonerLing in colmap/colmap#3492
Configure trivial rigs for unconfigured images by @ahojnnes in colmap/colmap#3497
Fix pycolmap test command by @ahojnnes in colmap/colmap#3506
Pano SFM example improvements and fixes by @ahojnnes in colmap/colmap#3503
Support Python 3.14 and retire 3.8 by @ahojnnes in colmap/colmap#3518
Upgrade ruff and automatically apply fixes by @ahojnnes in colmap/colmap#3515
Update point3D errors after bundle adjustment or SfM by @whuaegeanse in colmap/colmap#3500
Add option to filter stationary points in two-view geometry estimation by @ahojnnes in colmap/colmap#3521
Add unit test for watermark detection by @ahojnnes in colmap/colmap#3524
Fix comment for FilterStationaryMatches by @sarlinpe in colmap/colmap#3525
Ignore compile_commands.json in git by @ahojnnes in colmap/colmap#3526
Fix bundle adjustment performance regression due to changed Gauge by @ahojnnes in colmap/colmap#3527
Bind CUDA utils in pycolmap by @ahojnnes in colmap/colmap#3532
Add explicit tests for fixing gauge freedom and bugfix by @ahojnnes in colmap/colmap#3533
Fix format specifier overflow in WriteSnapshot() timestamp by @StonerLing in colmap/colmap#3534
Change input in cost function to log scale and remove custom manifold from colmap. by @B1ueber2y in colmap/colmap#3538
Throw exception when image.SetFramePtr() sets a frame without the image listed as its data. by @B1ueber2y in colmap/colmap#3540
Avoid frame having data from a sensor that does not exist in its associated rig. by @B1ueber2y in colmap/colmap#3543
Revert scale changes for metric reconstruction in rig sfm. by @B1ueber2y in colmap/colmap#3530
Fix comment for C++20 support. by @B1ueber2y in colmap/colmap#3547
Clean up unused includes in scene folder by @ahojnnes in colmap/colmap#3548
Add random_seed to IncrementalMapper to control all RANSAC seeds for improved SfM reproducibility by @StonerLing in colmap/colmap#3544
Throw exception at counting registered images when an image in the frame does not exist in the reconstruction. by @B1ueber2y in colmap/colmap#3546
Clean up unused includes in retrieval folder by @ahojnnes in colmap/colmap#3549
Clean up unused includes in optim folder by @ahojnnes in colmap/colmap#3550
Fix ModelViewerWidget::ClearReconstruction by @whuaegeanse in https://github.com/colmap/colmap/pull/3552
Fix build with Boost 1.89.0 by @cho-m in colmap/colmap#3553
Clean up unused includes in util folder by @ahojnnes in colmap/colmap#3551
Retire Mac x86 support by @ahojnnes in colmap/colmap#3555
Update database bindings by @ahojnnes in colmap/colmap#3556
Throw exception for Frame::SetRigId when rig pointer is available. by @B1ueber2y in https://github.com/colmap/colmap/pull/3558
Fix rig configuration with differing IDs between database and reconstruction by @ahojnnes in colmap/colmap#3557
Removing the Global Lock in SiftGPUFeatureMatcher for CUDA backend by @yimingc in colmap/colmap#3561
Add option to skip matching for image pairs in same frame by @ahojnnes in colmap/colmap#3563
Add option to keep specific cameras constant by @ahojnnes in colmap/colmap#3565
Throw exception if any camera in the rig does not exist in the reconstruction. by @B1ueber2y in colmap/colmap#3564
Clean up unused includes in controllers folder by @ahojnnes in colmap/colmap#3566
Extract image pair conversion functions into type utils by @ahojnnes in colmap/colmap#3568
Clean up unused includes in estimators folder by @ahojnnes in colmap/colmap#3567
Expect error threshold for generalized relative pose in pixel space by @ahojnnes in colmap/colmap#3571
Add function to read number of matches by @ahojnnes in colmap/colmap#3572
Add a test to ensure THROW_CHECK conditions are evaluated exactly once by @ahojnnes in colmap/colmap#3573
Simplify and reuse feature matcher thread creation by @ahojnnes in colmap/colmap#3575
Increase exhaustive matching cache size by @ahojnnes in colmap/colmap#3576
Add option to clean two-view geometries by @ahojnnes in colmap/colmap#3577
Decouple feature matching and two-view geometry options by @ahojnnes in colmap/colmap#3578
Display CLI floating-point defaults with 3 significant digits by @StonerLing in colmap/colmap#3579
Make use_log_scale an option for Point3DAlignmentCost. by @B1ueber2y in colmap/colmap#3574
Cache max number of keypoints by @ahojnnes in colmap/colmap#3583
Add tool for geometric verification by @ahojnnes in colmap/colmap#3581
Minor perf and code quality improvements for visual inverted index by @ahojnnes in colmap/colmap#3584
Upgrade pybind11 to 3.0.0 by @ahojnnes in colmap/colmap#3523
Fix missing colmap namespace in sqlite3 macro. by @B1ueber2y in colmap/colmap#3587
Use pybind smart holder for all classes by @ahojnnes in colmap/colmap#3542
Add option to perform geometric verification with rig constraints by @ahojnnes in colmap/colmap#3498
Use Qt QSettings to remember last-used paths across file dialogs by @MotivaCG in colmap/colmap#3585
Fix MaybeLoadImages by @whuaegeanse in colmap/colmap#3586
Sync 3.12 changelog changes by @ahojnnes in colmap/colmap#3591
Document rig-related feature matching options and change rig verification defaults by @ahojnnes in colmap/colmap#3592
Abstract database interface and sqlite implementation by @ahojnnes in colmap/colmap#3541
Share feature extraction max_image_size option by @ahojnnes in colmap/colmap#3600
Support for reading RGB or grayscale images for feature extraction by @ahojnnes in colmap/colmap#3603
Support both Qt5 and Qt6 by @zhouzq-thu in colmap/colmap#3597
Add option to fix individual rigs by @ahojnnes in colmap/colmap#3604
Ensure download support on Ubuntu by installing libssl-dev for crypto by @ahojnnes in colmap/colmap#3607
Update pybind11 to 3.0.1 by @ahojnnes in colmap/colmap#3609
Fix focal length extraction from 35mm equivalent by @ahojnnes in colmap/colmap#3617
Update to Windows 2025 runners and pin pycolmap image versions by @ahojnnes in colmap/colmap#3618
Update to latest vcpkg by @ahojnnes in colmap/colmap#3619
Add bindings for mvs::model for covisibility support in pycolmap by @B1ueber2y in https://github.com/colmap/colmap/pull/3621
Fix inconsistent pycolmap naming for RegisterFrame and DeRegisterFrame. by @B1ueber2y in colmap/colmap#3623
Add Conda package installation instructions by @Tobias-Fischer in colmap/colmap#3624
Call Retriangulate irrespective of the logging level by @sarlinpe in colmap/colmap#3626
Add missing rig and frame interfaces for pycolmap database. by @B1ueber2y in colmap/colmap#3629
Throw exception when the rig configurations of the database and existing reconstruction are inconsistent. by @B1ueber2y in colmap/colmap#3628
Improve the Gauge logic for fixing two views. by @B1ueber2y in colmap/colmap#3627
Add changelog for 3.12.6 release. by @B1ueber2y in colmap/colmap#3632
Ensure min/max_focal_length_ratio and max_extra_param are piped to triangulation by @ahojnnes in colmap/colmap#3637
Fix broken logic of removing cameras at Reconstruction::TearDown(). by @B1ueber2y in colmap/colmap#3634
Minor: resolve -Wsign-compare warning for min_num_inliers. by @B1ueber2y in colmap/colmap#3639
Remove redundant binding of feature module in pycolmap by @ahojnnes in colmap/colmap#3640
Remove plyfile python package copy due to GNU license by @ahojnnes in colmap/colmap#3644
rig_from_world and sensor_from_rig in pycolmap should return reference rather than copy. by @B1ueber2y in colmap/colmap#3645
Also replace mask file extension to .png instead of appending by @Dawars in colmap/colmap#3611
Fix crash when built without GPU support by @sarlinpe in colmap/colmap#3649
Replace custom filtering with image filter view by @ahojnnes in colmap/colmap#3651
Expose image_ids filter view in frame in pycolmap by @ahojnnes in colmap/colmap#3652
Simplify and fix updating cameras with priors in benchmarking by @ahojnnes in colmap/colmap#3653
Fix typo in patch match options documentation by @ahojnnes in colmap/colmap#3655
Consistently name local BA options and deduplicate local_ba_num_images by @ahojnnes in colmap/colmap#3657
Adjust reconstruction consistency checks by @ahojnnes in colmap/colmap#3658
Improve the doc for loop_detection_period. by @sarlinpe in colmap/colmap#3661
Expose comparison operators in Python bindings by @jhacsonmeza in colmap/colmap#3663
Feature sub-selection for global BA by @ahojnnes in colmap/colmap#3650
Compute alignment RANSAC max_error from RMS stddev and chi-square by @StonerLing in colmap/colmap#3664
Address clang-tidy 21 errors by @ahojnnes in colmap/colmap#3668
Extract synthetic reconstruction noise functionality into separate utility by @ahojnnes in colmap/colmap#3670
Fix copy assignment of image by @ahojnnes in colmap/colmap#3671
Add gmock matcher for checking approximate reconstruction equality by @ahojnnes in colmap/colmap#3672
Add gmock matcher for checking reconstruction equality by @ahojnnes in colmap/colmap#3673
Include cassert by @FlexW in colmap/colmap#3674
Parallelize incremental mapper initialization by @ahojnnes in colmap/colmap#3675
Add timeout option for incremental mapper by @ahojnnes in colmap/colmap#3676
Implement equals operator for FeatureKeypoint/Match by @ahojnnes in colmap/colmap#3678
Add method to update keypoints in database by @ahojnnes in colmap/colmap#3679
Fix noise synthesis to consistently update database keypoints by @ahojnnes in colmap/colmap#3680
Add missing binding for Reconstruction::DeleteAllPoints2DAndPoints3D. by @B1ueber2y in https://github.com/colmap/colmap/pull/3682
Fix BA convergence setting bug during initialization by @ahojnnes in colmap/colmap#3677
Add notice of the version of panorama_sfm.py by @sarlinpe in colmap/colmap#3685
Cuda-Enabled Pip Package (Linux x86-64 only) by @Tobias314 in colmap/colmap#3608
Update to CUDA 12.9.1 in CI by @ahojnnes in colmap/colmap#3610
Add test for BA controller by @ahojnnes in colmap/colmap#3683
Add tests for option manager by @ahojnnes in colmap/colmap#3684
Add tests for feature matching controllers by @ahojnnes in colmap/colmap#3686
Remove unused variable in reconstruction test by @ahojnnes in colmap/colmap#3691
Update the logic of duplicate correspondence to support one-to-many matches. by @B1ueber2y in colmap/colmap#3681
Some misc code improvements for ObservationManager by @ahojnnes in colmap/colmap#3689
Update PyPI publishing by @sarlinpe in colmap/colmap#3692
Update deprecated Eigen JacobiSVD usage by @ahojnnes in colmap/colmap#3690
Add unit test for feature extraction controller by @ahojnnes in colmap/colmap#3693
Update to latest clang-format 20.1.5 by @ahojnnes in colmap/colmap#3694
Add function to synthesize images by @ahojnnes in colmap/colmap#3696
Remove deprecated rig bundle adjuster by @B1ueber2y in colmap/colmap#3698
Fix coordinate bug in ComputeEqualPartsBboxes by @ahojnnes in colmap/colmap#3700
Create unit test for automatic reconstruction controller by @ahojnnes in colmap/colmap#3697
Add unit test for HammingDistanceWeightFunctor by @ahojnnes in colmap/colmap#3702
Add unit test for option manager parsing and move sys exit to call sites by @ahojnnes in colmap/colmap#3703
Add unit test for feature importer controller by @ahojnnes in colmap/colmap#3704
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)#
Cancel previous Github action runs upon push by @ahojnnes in colmap/colmap#2998
Fix ccache installation in pycolmap windows CI by @ahojnnes in colmap/colmap#2997
Use Azure blob storage as vcpkg binary cache by @ahojnnes in colmap/colmap#2999
Add missing openmp flags in retrieval for flann parallelization by @ahojnnes in colmap/colmap#3018
Separate read and write SAS tokens for vcpkg binary cache by @ahojnnes in colmap/colmap#3027
Define vcpkg binary cache source inline by @ahojnnes in colmap/colmap#3028
Fix conditional vcpkg binary cache config in bash by @ahojnnes in colmap/colmap#3031
Avoid absolute path for the include directory installation by @jhacsonmeza in colmap/colmap#3024
Add conversion between LLA and UTM coords. by @StonerLing in colmap/colmap#3030
Improve interface for ReadWriteBinaryBlob and add tests by @ahojnnes in colmap/colmap#3033
Add support for downloading files by @ahojnnes in colmap/colmap#3022
Add function to compute sha256 digest by @ahojnnes in colmap/colmap#3035
Automatically download and cache vocabulary tree by @ahojnnes in colmap/colmap#3036
Set vcpkg default features and synchronize to latest vcpkg by @ahojnnes in colmap/colmap#3038
Avoid unnecessary copy of input elements in Percentile/Median by @ahojnnes in colmap/colmap#3039
Abstract algorithm class IncrementalMapperImpl by @B1ueber2y in colmap/colmap#3040
Perform linear interpolation in percentile computation by @ahojnnes in colmap/colmap#3041
Avoid dependent inputs in IncrementalMapperImpl by @B1ueber2y in colmap/colmap#3043
Reorder destructors for better safety in EndReconstruction by @B1ueber2y in colmap/colmap#3046
Improvements for reconstruction normalization / bbox / centroid by @ahojnnes in colmap/colmap#3047
Speedup affine transform minimal solver, create python bindings by @ahojnnes in colmap/colmap#3049
Fix compilation with DOWNLOAD_ENABLED=OFF by @ahojnnes in colmap/colmap#3053
Consistent interface/tests for rigid3d/sim3d/affine2d, pycolmap bindings for rigid3d by @ahojnnes in colmap/colmap#3051
Improve logging for errors in masking during feature extraction by @Ambrosiussen in colmap/colmap#3034
Add copy constructor support for solver-related ceres bindings by @B1ueber2y in colmap/colmap#3059
Minor fix on using pycolmap bundle adjuster with pyceres by @B1ueber2y in colmap/colmap#3060
Re-enable interface support for covariance estimation from a Ceres::Problem instance by @B1ueber2y in https://github.com/colmap/colmap/pull/3061
Only cancel CI runs in PRs and not in main/release branches by @ahojnnes in colmap/colmap#3063
Add binding support for invalid values in pycolmap id types by @B1ueber2y in colmap/colmap#3072
Fix custom quality level in ETH3D benchmark by @ahojnnes in colmap/colmap#3076
Set max_num_features automatically per quality level by @ahojnnes in colmap/colmap#3077
Make it possible to build the MVS doc even when CUDA is not installed by @sarlinpe in colmap/colmap#3078
Temporarily disable ccache in the pycolmap macOS CI by @sarlinpe in colmap/colmap#3084
Add option to specify image list in automatic reconstruction by @ahojnnes in colmap/colmap#3074
Only create OpenGL context in automatic reconstruction if necessary by @ahojnnes in colmap/colmap#3075
Remove unnecessary braces around initializer in pycolmap/covariance by @ahojnnes in colmap/colmap#3080
Remove temporary fixes for macOS CI by @sarlinpe in colmap/colmap#2954
Reconstruction benchmark by @ahojnnes in colmap/colmap#2714
Re-enable ccache in pycolmap Mac CI by @sarlinpe in colmap/colmap#3085
Fix transitive completion in incremental triangulator by @ahojnnes in colmap/colmap#3094
Fix image deletion, hide point viewer widget after deletion by @ahojnnes in colmap/colmap#3098
Fix download functionality under Windows by @ahojnnes in colmap/colmap#3099
Add back detailed logs for covariance estimation by @B1ueber2y in colmap/colmap#3082
Fix reprojection error in camera rig cost function by @binbin-xu in colmap/colmap#3106
Install missing libcurl4 runtime library in dockerfile by @ahojnnes in colmap/colmap#3122
Expose incremental mapper pose prior options in pycolmap by @ahojnnes in colmap/colmap#3123
Remove year from copyright by @ahojnnes in colmap/colmap#3124
Use poselib for generalized absolute pose minimal solver by @ahojnnes in colmap/colmap#3125
Add code coverage reporting by @ahojnnes in colmap/colmap#3126
Fix synthetic prior generation when stddev=0 by @ahojnnes in colmap/colmap#3128
Create temporary colmap test directy under system test directory by @ahojnnes in colmap/colmap#3129
Minor: pyceres is no longer a must for running pycolmap bundle adjuster by @B1ueber2y in colmap/colmap#3130
Fix cost functor convention for benchmarking by @B1ueber2y in colmap/colmap#3131
Support enum from string conversion by @ahojnnes in colmap/colmap#3132
More robustly handle degenerate triangulation angles by @ahojnnes in colmap/colmap#3135
Minor: add missing empty namespace in alignment testing script by @B1ueber2y in colmap/colmap#3137
Add frame impl for future rig support by @B1ueber2y in colmap/colmap#2698
Rename RigCalibration to RigCalib by @ahojnnes in colmap/colmap#3142
Fix and improve two-view pose and triangulation angle estimation by @ahojnnes in colmap/colmap#3146
Fix covariance propagation of pose inverse by @B1ueber2y in colmap/colmap#3155
[Spherical Camera Support] Change essential matrix estimation to use camera rays by @ahojnnes in colmap/colmap#3159
Improve incremental mapper initialization logic by @ahojnnes in colmap/colmap#3161
Improved RANSAC dependency injection by @ahojnnes in colmap/colmap#3165
Add docs on the left convention in COLMAP for covariance propagation. by @B1ueber2y in colmap/colmap#3167
Add docker instruction link to docs by @j3soon in colmap/colmap#3169
Compute absolute pose estimation error in image space by @ahojnnes in colmap/colmap#3166
Add support for propagating relative pose covariance. by @B1ueber2y in colmap/colmap#3168
Avoid using namespace in pycolmap headers by @ahojnnes in colmap/colmap#3173
Fix naming of cross covariance and add relative pose covariance interface by @B1ueber2y in colmap/colmap#3170
Camera models perform valid projection test by @ahojnnes in colmap/colmap#3172
Various improvements and extensions for pycolmap by @ahojnnes in colmap/colmap#3176
Fix pycolmap ci build for pull requests by @B1ueber2y in colmap/colmap#3178
Change CamFromImg to return optional ray by @ahojnnes in colmap/colmap#3180
Triangulation operates on camera rays by @ahojnnes in colmap/colmap#3184
Python bindings for visual index by @ahojnnes in colmap/colmap#3185
Define bindings in the correct order by @sarlinpe in colmap/colmap#3189
Restore CamFromImg to return normalized camera coordinates instead of… by @ahojnnes in colmap/colmap#3193
Add Rig serialization support to reconstruction+database by @ahojnnes in colmap/colmap#3143
Pull changes from main branch by @ahojnnes in colmap/colmap#3194
Fix maybe-uninitialized warnings by @papjuli in colmap/colmap#3199
Fix compilation errors with PoissonRecon by @theartful in colmap/colmap#3200
Remove Ubuntu 20.04 from the CI by @sarlinpe in colmap/colmap#3203
Add support for frame serialization by @ahojnnes in colmap/colmap#3202
Handle non-trivial frames in bundle adjustment by @ahojnnes in colmap/colmap#3214
Update email address by @sarlinpe in colmap/colmap#3223
Change the root of the Python package by @sarlinpe in colmap/colmap#3217
Fix bug when toggling rendering by @ahojnnes in colmap/colmap#3230
Add convenience iterator for frame image ids by @ahojnnes in colmap/colmap#3231
Update feature/rig with main by @ahojnnes in colmap/colmap#3241
Update to latest vcpkg by @ahojnnes in colmap/colmap#3243
Update feature/rig branch with latest changes in main by @ahojnnes in colmap/colmap#3244
Fix incremental pycolmap build script by @ahojnnes in colmap/colmap#3245
Logically group image reader options by @ahojnnes in colmap/colmap#3246
Fix chained match synthesis by @ahojnnes in colmap/colmap#3248
Retire Reconstruction::IsImageRegistered in favor of existing Image::HasPose by @ahojnnes in https://github.com/colmap/colmap/pull/3247
Fix two-view geometry pose estimation for homography by @ahojnnes in colmap/colmap#3250
Fix uninitialized variable warnings by @ahojnnes in colmap/colmap#3254
Include Boost headers on build by @jonahjnewton in colmap/colmap#3257
Pull latest changes from main to feature/rig by @ahojnnes in colmap/colmap#3262
Support rigs/frames in incremental mapper by @ahojnnes in colmap/colmap#3238
Rename FrameFromWorld to RigFromWorld pose by @ahojnnes in colmap/colmap#3263
Add pytest on the e2e python pipeline into CI. by @B1ueber2y in colmap/colmap#3266
Fix broken python interfaces by @B1ueber2y in colmap/colmap#3267
Use generalized absolute pose estimation for non-trivial frames by @ahojnnes in colmap/colmap#3265
Fix color extraction for rig frames by @ahojnnes in colmap/colmap#3268
Sequential matcher expands rig images by @ahojnnes in colmap/colmap#3270
Fix usage of deprecated pycolmap interfaces in pycolmap README. by @B1ueber2y in colmap/colmap#3272
Improved code/docs and tests for rig configuration by @ahojnnes in colmap/colmap#3275
Update vcpkg to pull in fixes for ceres by @ahojnnes in colmap/colmap#3276
Rig bundle adjuster uses default bundle adjustment routine by @ahojnnes in colmap/colmap#3281
Cleanup legacy camera rig code by @ahojnnes in colmap/colmap#3283
Store rig sensors and frame data in separate database tables by @ahojnnes in colmap/colmap#3285
Configure trivial rigs and frames during feature extraction by @ahojnnes in colmap/colmap#3287
[Bugfix] Center 2D points by principal point for absolute pose estimation with unknown focal length by @xjiangan in colmap/colmap#3289
Add bindings for rig configuration by @ahojnnes in colmap/colmap#3291
Documentation for rig support by @ahojnnes in colmap/colmap#3290
Fix documentation of rigs.txt by @sarlinpe in colmap/colmap#3292
Update feature/rig with latest changes in main by @ahojnnes in colmap/colmap#3293
Merge feature/rig branch into main by @ahojnnes in colmap/colmap#3295
improve clarity of the rig example by @B1ueber2y in colmap/colmap#3297
Bind missing SequentialMatchingOptions.loop_detection_period by @sarlinpe in colmap/colmap#3299
cleanup legacy comments for base controller. by @B1ueber2y in colmap/colmap#3300
Fix bug in grayscale Bitmap.to_array by @sarlinpe in colmap/colmap#3301
Handle errors in Bitmap.read by @sarlinpe in colmap/colmap#3302
Add an example script for SfM with 360 spherical images by @sarlinpe in colmap/colmap#3304
Recognize URIs for vocab_tree_path in GUI feature matching by @ahojnnes in colmap/colmap#3305
Deterministic behavior for Python pipeline tests by @ahojnnes in colmap/colmap#3306
Move colmap/ui/main_window.h include to implementation by @ahojnnes in colmap/colmap#3307
Add Python 3.13 to pycolmap build matrix by @ahojnnes in colmap/colmap#3308
Add missing SiftMatchingOptions::cpu_brute_force_matcher to pycolmap bindings by @ahojnnes in https://github.com/colmap/colmap/pull/3309
Augment pinhole renders with GPS EXIFs of the panos by @sarlinpe in colmap/colmap#3310
Add missing cpu_brute_force_matcher to option manager by @ahojnnes in colmap/colmap#3315
Bind GPSTransform and make GPSTransform::Ellipsoid an enum class by @sarlinpe in https://github.com/colmap/colmap/pull/3311
Update pose prior bundle adjuster to handle rigs by @ahojnnes in colmap/colmap#3312
Add support for running pose prior mapper from GUI by @ahojnnes in colmap/colmap#3313
Enable different matcher types and default to sequential in pano example by @ahojnnes in colmap/colmap#3314
Modularize reconstruction I/O formats into different libraries by @ahojnnes in colmap/colmap#3317
Fall back to P3P solver for panoramic generalized absolute pose by @ahojnnes in colmap/colmap#3318
Fix FLANN-based CPU feature matcher crash in pycolmap by @ahojnnes in colmap/colmap#3320
Update cibuildwheel to 2.23.2 by @ahojnnes in colmap/colmap#3081
Assume prior focal length for explicitly defined rig camera models by @ahojnnes in colmap/colmap#3321
Fix rig configuration with partial input reconstruction by @ahojnnes in colmap/colmap#3322
Use reference for image.camera and image.frame in pycolmap. by @B1ueber2y in colmap/colmap#3323
Use reference for frame.rig in pycolmap. by @B1ueber2y in colmap/colmap#3324
Cosmetic improvement on some geometry python bindings by @B1ueber2y in colmap/colmap#3325
Add unit test for EstimateAbsolutePose by @ahojnnes in colmap/colmap#3327
Add gmock matchers for rigid3 and sim3 by @ahojnnes in colmap/colmap#3328
Add unit tests for absolute pose refinement by @ahojnnes in colmap/colmap#3330
Cosmetic cleanup for absolute pose tests by @ahojnnes in colmap/colmap#3333
Add generalized relative pose estimation and pose binding cleanups by @ahojnnes in colmap/colmap#3334
Turn camera parameter access debug checks into throwing checks by @ahojnnes in colmap/colmap#3337
Handle panoramic rigs in generalized relative pose estimation by @ahojnnes in colmap/colmap#3338
Cosmetic variable name improvements to match conventions by @ahojnnes in colmap/colmap#3341
Add unit test for relative pose estimation by @ahojnnes in colmap/colmap#3342
Avoid nested parallelization for vocab tree pairing by @ahojnnes in colmap/colmap#3343
Fix rigid3/sim3 matchers for older eigen versions by @ahojnnes in colmap/colmap#3344
Deterministic homography test by @ahojnnes in colmap/colmap#3346
Add missing return statement in PyEstimateGeneralizedRelativePose by @ahojnnes in colmap/colmap#3349
Fix runtime error in panorama_sfm.py with sequential matching by @samuelm2 in colmap/colmap#3351
Fix race conditions in feature matcher cache by @ahojnnes in colmap/colmap#3354
Use shared lock in thread safe LRU cache by @ahojnnes in colmap/colmap#3355
Upgrade Jimver/cuda-toolkit GH actions task to 0.2.23 by @ahojnnes in colmap/colmap#3358
Upgrade to Ubuntu 24.04 / clang-18 in CI for ASan and ClangTidy builds by @ahojnnes in colmap/colmap#3357
Use add_compile_definitions instead of deprecated add_definitions by @ahojnnes in colmap/colmap#3348
Update Mac Github runners and fix pycolmap deployment targets by @ahojnnes in colmap/colmap#3361
Suppress CUDA warnings related constexpr host/device calls by @ahojnnes in colmap/colmap#3362
Update docker image to ubuntu 24.04 by @ahojnnes in colmap/colmap#3363
Fix benchmarking for rigs by @ahojnnes in colmap/colmap#3364
Add option to overwrite matches in benchmarking by @ahojnnes in colmap/colmap#3365
Replace flann with faiss by @ahojnnes in colmap/colmap#3350
Update docker with all major CUDA archs and updated boost version by @ahojnnes in colmap/colmap#3369
Retire remaining flann components and remove as dependency by @ahojnnes in colmap/colmap#3370
Update feature index to use float descriptors and distances by @ahojnnes in colmap/colmap#3371
Fix deadlock during feature matching by @ahojnnes in colmap/colmap#3373
Warn user when reading legacy flann index by @ahojnnes in colmap/colmap#3372
expose loading database into database cache from DatabaseCache::Create. by @B1ueber2y in https://github.com/colmap/colmap/pull/3375
minor: rename DatabaseCache::LoadDatabase to Load by @B1ueber2y in https://github.com/colmap/colmap/pull/3376
Fix typo by @B1ueber2y in colmap/colmap#3377
Unit tests for image reader, remove redundant definition of database by @ahojnnes in colmap/colmap#3383
Fix trailing comma-separation when printing list contents by @ahojnnes in colmap/colmap#3388
Add missing VocabTreeMatching.num_threads in option manager by @ahojnnes in colmap/colmap#3389
Use OpenBLAS OpenMP version under Ubuntu to fix slow faiss by @ahojnnes in colmap/colmap#3390
Speedup database reads of rigs/frames with single SQL outer join query by @ahojnnes in colmap/colmap#3387
Introduce context manager to reset sqlite3 statements by @ahojnnes in colmap/colmap#3392
Add missing use_gpu options in pycolmap SIFT bindings by @ahojnnes in colmap/colmap#3397
Add FeatureMatch python bindings by @ahojnnes in colmap/colmap#3398
Add option to set log level in GUI by @ahojnnes in colmap/colmap#3399
Add docs to explain the concepts of rigs and frames. by @B1ueber2y in colmap/colmap#3395
Allow png mask without double extension by @MotivaCG in colmap/colmap#3284
Propagate macros to top-level CMakeLists.txt files by @jhacsonmeza in colmap/colmap#3396
Add a missing function implementation by @lpanaf in colmap/colmap#3412
Improved tests for reconstruction merging by @ahojnnes in colmap/colmap#3413
Use MKL as BLAS vendor for faiss by @ahojnnes in colmap/colmap#3393
Fix wrong doc for point covariance by @B1ueber2y in colmap/colmap#3416
Add legacy docs from 3.8 to 3.11. by @B1ueber2y in colmap/colmap#3414
Do not filter existing, fixed frames by @ahojnnes in colmap/colmap#3403
Tag commit id and date in the doc generation by @B1ueber2y in colmap/colmap#3417
Return bad initial pair when number of triangulation is less than abs_pose_min_num_inliers by @B1ueber2y in colmap/colmap#3418
Add option to build with thread sanitizer flags by @ahojnnes in colmap/colmap#3420
Add option to build with undefined behavior sanitizer flags by @ahojnnes in colmap/colmap#3421
Fix the RANSAC stopping criterion by @ahojnnes in colmap/colmap#3425
Replace incorrect call to nonZeros by @sarlinpe in colmap/colmap#3426
Add deprecation warning for rig_bundle_adjuster by @sarlinpe in colmap/colmap#3427
Fix incorrect include in euclidean_transform.h by @sarlinpe in colmap/colmap#3428
Add Frame::SetCamFromWorld in pycolmap and fix comment. by @B1ueber2y in https://github.com/colmap/colmap/pull/3429
Estimate essential matrix using camera rays instead of points by @ahojnnes in colmap/colmap#3423
Fix FilterPoints3DWithSmallTriangulationAngle to return number of filtered observations by @whuaegeanse in colmap/colmap#3424
Update to latest vcpkg commit by @ahojnnes in colmap/colmap#3430
Initialize from non-trivial frame pairs using generalized relative pose by @ahojnnes in colmap/colmap#3419
Fix setup_ubuntu.sh for docker by @MasahiroOgawa in colmap/colmap#3432
Support visualization of models with arbitrary origin and scale by @ahojnnes in colmap/colmap#3044
Fix ReadPositionPriorData to return valid and numerically more stable Position prior data by @whuaegeanse colmap/colmap#3438
COLMAP 3.11.1 (12/06/2024)#
Bug Fixes#
Fix typo in pycolmap function align_reconstruction_to_locations interface by @B1ueber2y in colmap/colmap#2961
Add back some ceres bindings to use pycolmap bundle adjustment without pyceres by @B1ueber2y in colmap/colmap#2985
Fix setting of RANSAC max error in pose prior BA alignment by @ahojnnes in colmap/colmap#2993
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_priorstable in database in support of pose prior based mapper.PyCOLMAP API:
align_reconstrution_to_locationsis renamed toalign_reconstruction_to_locations(typo).pycomap.cost_functionsbecomes a module and should be explicitly imported asimport pycolmap.cost_functions.Replaced
Image.registeredbyImage.{has_pose,reset_pose}.Replaced
Image.{get_valid_point2D_ids,get_valid_points2D}byImage.{get_observation_point2D_idxs,get_observation_points2D}.Replaced
Track.{append,remove}byTrack.{add_element,delete_element}.AbsolutePoseErrorCostbecomesAbsolutePosePriorCost.MetricRelativePoseErrorCostbecomesRelativePosePriorCost.The signature of
ReprojErrorCostand related cost functions was changed: arguments are reordered, the detection uncertainty is now a 2x2 covariance matrix.BundleAdjusterbecomes virtual and should be created withpycolmap.create_default_bundle_adjuster().absolute_pose_estimationbecomesestimate_and_refine_absolute_pose.pose_refinementbecomesrefine_absolute_pose.essential_matrix_estimationbecomesestimate_essential_matrix.fundamental_matrix_estimationbecomesestimate_fundamental_matrix.rig_absolute_pose_estimationbecomesestimate_and_refine_generalized_absolute_pose.homography_matrix_estimationbecomesestimate_homography_matrix.squared_sampson_errorbecomescompute_squared_sampson_error.homography_decompositionbecomespose_from_homography_matrix.Rigid3d.essential_matrixbecomespycolmap.essential_matrix_from_pose.
Full Change List (sorted temporally)#
Updates for pycolmap by @ahojnnes in colmap/colmap#2672
Trigger CI on release/* branches by @ahojnnes in colmap/colmap#2673
Use consistent versioning scheme between C++/Python by @ahojnnes in colmap/colmap#2674
Add cost function for 3D alignment (with covariance) by @B1ueber2y in colmap/colmap#2621
Numpy 2 compatibility by @sarlinpe in colmap/colmap#2682
Add fix for specifying the correct pycolmap CMake python development … by @fulkast in colmap/colmap#2683
Remove non existant flags of model_aligner from docs by @TamirCohen in colmap/colmap#2696
Reset CMAKE_MODULE_PATH to previous value by @mvieth in colmap/colmap#2699
Robustify nchoosek against overflow by @ahojnnes in colmap/colmap#2706
Observation manager needs to check if image_id exists before query operations by @bo-rc in colmap/colmap#2704
Remove pose prior from database.py:add_image by @sarlinpe in https://github.com/colmap/colmap/pull/2707
Fix: sequential matcher overlap number should be inclusive by @flm8620 in colmap/colmap#2701
Fix table mangled by clang-format by @sweber1 in colmap/colmap#2710
Write out options to ini in full precision, relax bundle adjuster convergence by @ahojnnes in colmap/colmap#2713
Tests for pairing library in feature matching by @ahojnnes in colmap/colmap#2711
Rename IncrementalMapperOptions to IncrementalPipelineOptions by @B1ueber2y in colmap/colmap#2708
Add support for CUDA sparse BA solver by @ahojnnes in colmap/colmap#2717
Rename HierarchicalMapperController to HierarchicalPipeline by @ahojnnes in colmap/colmap#2718
Make VisualIndex::Quantize const to improve readability by @IshitaTakeshi in https://github.com/colmap/colmap/pull/2723
Fix CUDA_ENABLED macro in new bundle adjustment code by @drkoller in colmap/colmap#2725
Automatically generate stub files by @sarlinpe in colmap/colmap#2721
Add CUDA-based dense BA solver by @ahojnnes in colmap/colmap#2732
Improved and simplified caching in feature matching by @ahojnnes in colmap/colmap#2731
Fix colmap namespace in the macro support of logging. by @B1ueber2y in colmap/colmap#2733
Add callbacks by move by @ahojnnes in colmap/colmap#2734
Implement transitive matcher with pair generator + tests by @ahojnnes in colmap/colmap#2735
Provide reasonable defaults for some estimator options by @sarlinpe in colmap/colmap#2745
Fix mismatched Delaunay meshing options by @sarlinpe in colmap/colmap#2748
PyCOLMAP API documentation by @sarlinpe in colmap/colmap#2749
Improved pycolmap coverage and docs by @sarlinpe in colmap/colmap#2752
Follow-up fixes in pycolmap by @sarlinpe in colmap/colmap#2755
Report errors in import_images by @sarlinpe in colmap/colmap#2750
Further simplification of feature matcher code by @ahojnnes in colmap/colmap#2744
Add missing ClearModifiedPoints3D by @sarlinpe in colmap/colmap#2761
Store shared camera ptr for reconstruction images by @ahojnnes in colmap/colmap#2762
Avoid unnecessary copy of queue in IncrementalTriangulator::Complete() by @ahojnnes in colmap/colmap#2764
Branch prediction for THROW_CHECK_NOTNULL by @ahojnnes in colmap/colmap#2765
Use shared camera pointer in more places by @ahojnnes in colmap/colmap#2763
Support switching camera directly with camera pointer by @B1ueber2y in colmap/colmap#2767
Add test for MergeReconstructions by @B1ueber2y in colmap/colmap#2766
Fix little/big endian detection by @ahojnnes in colmap/colmap#2768
Fix options for CUDA sparse BA solver by @whuaegeanse in colmap/colmap#2758
Rename SupperMeasurer::Compare for improved readability by @ahojnnes in https://github.com/colmap/colmap/pull/2774
Improvements for install docs by @ahojnnes in colmap/colmap#2773
fixed typo of align_reconstrution_to_locations to align_reconstructio… by @TamirCohen in colmap/colmap#2776
Fix missing camera ptr for Reconstruction.DeleteAllPoints2DAndPoints3D() by @B1ueber2y in colmap/colmap#2779
Rename remaining proj_matrix instances to cam_from_world by @ahojnnes in colmap/colmap#2780
Relative pose decomposition uses Rigid3d by @ahojnnes in colmap/colmap#2781
Minor renaming on pycolmap point2d and point3d filenames by @B1ueber2y in colmap/colmap#2784
Add validity check for pixel coordinate in the Fisheye camera. Fix tests. by @B1ueber2y in colmap/colmap#2790
Use branch prediction in PRNG functions by @ahojnnes in colmap/colmap#2796
Implementation of Aria Fisheye camera model by @nushakrishnan in colmap/colmap#2786
Upgrade to C++ 17 by @B1ueber2y in colmap/colmap#2801
Pose Prior based Incremental Mapper by @ferreram in colmap/colmap#2660
Expose UpdatePoint3DErrors to pycolmap by @theartful in colmap/colmap#2805
Switch to the Ruff Python formatter by @sarlinpe in colmap/colmap#2803
Add mixed Python-C++ PyCOLMAP package by @sarlinpe in colmap/colmap#2747
Enable Ruff linter for Python by @sarlinpe in colmap/colmap#2806
Use C++17 structured bindings in some places by @ahojnnes in colmap/colmap#2808
Add RAD_TAN_THIN_PRISM_FISHEYE to camera docs by @ahojnnes in colmap/colmap#2810
Customized cost functions should be functors instead by @B1ueber2y in colmap/colmap#2811
Install and use newer clang-format from pypi by @ahojnnes in colmap/colmap#2812
Return a reference in Reconstruction.image/camera/point3D by @sarlinpe in colmap/colmap#2814
Add test for PositionPriorErrorCostFunctor. by @ferreram in colmap/colmap#2815
Replace boost/filesystem with standard library by @ahojnnes in colmap/colmap#2809
Fix selection of BA solver type when there is no cuda by @ahojnnes in colmap/colmap#2822
More informative exception if invalid access of image/camera/point3D by @sarlinpe in colmap/colmap#2825
Use minimal solvers from poselib by @ahojnnes in colmap/colmap#2288
Disable -march=native flags in poselib by @ahojnnes in colmap/colmap#2828
Make
Image::cam_from_world_optional by @sarlinpe in colmap/colmap#2824Remove warning in configure step by @sarlinpe in colmap/colmap#2830
Fix coordinate notation in EstimateAbsolutePose by @ahojnnes in colmap/colmap#2833
Return success status in low-level triangulation functions by @ahojnnes in colmap/colmap#2834
Pin mypy version for tests by @ahojnnes in colmap/colmap#2849
Suppress CMP0167 warning for FindBoost under CMake 3.30 or newer by @ahojnnes in colmap/colmap#2853
Reconstruction reader/writer tests and scene class repr by @ahojnnes in colmap/colmap#2842
Select CUDA device when bundle adjustment uses GPU by @ahojnnes in colmap/colmap#2846
Fix copying behaviors of Reconstruction regarding camera pointers by @B1ueber2y in colmap/colmap#2841
Use the C++ string representation for Python dataclass objects by @sarlinpe in colmap/colmap#2855
Various improvements for pycolmap bindings by @ahojnnes in colmap/colmap#2854
Use analytical Jacobian in IterativeUndistortion. Add trust region by @B1ueber2y in colmap/colmap#2857
Improve the conditioning of covariance estimation by @B1ueber2y in colmap/colmap#2860
Avoid unnecessary copy of RANSAC inlier masks by @ahojnnes in colmap/colmap#2863
Various improvements for cost functors by @ahojnnes in colmap/colmap#2867
Rename
*_mapperto*_pipelinefiles by @ahojnnes in colmap/colmap#2870Update the manylinux CI to GCC 10 by @sarlinpe in colmap/colmap#2873
Fix rare deadlock during matching due to concurrent database access by @ahojnnes in colmap/colmap#2876
Add new and missing options to automatic reconstructor by @ahojnnes in colmap/colmap#2877
Shared auto diff cost function creation by @ahojnnes in colmap/colmap#2878
Enable model alignment to reference model by @ahojnnes in colmap/colmap#2879
Add covariance weighted cost functor by @ahojnnes in colmap/colmap#2880
Fix unused variable warnings under MSVC by @ahojnnes in colmap/colmap#2884
Skip all but latest Python version in PR builds by @ahojnnes in colmap/colmap#2881
[doc] Fix path to example in README.md by @kielnino in colmap/colmap#2886
Update Github actions versions by @ahojnnes in colmap/colmap#2887
[doc] Fix typo for gui menu item by @kielnino in colmap/colmap#2885
Fix input type for automatic stereo fusion on extreme quality setting by @ahojnnes in colmap/colmap#2893
Make target with all sources optional by @HernandoR in colmap/colmap#2889
Gracefully handle missing image pose in viewer by @ahojnnes in colmap/colmap#2894
Update to latest vcpkg release 2024.10.21 by @ahojnnes in colmap/colmap#2908
Fix conversion from CUDA texture references to objects in SIFT feature extraction by @ahojnnes in colmap/colmap#2911
Modernized bundle adjustment interface by @ahojnnes in colmap/colmap#2896
Add missing unit tests for reconstruction alignment functions by @ahojnnes in colmap/colmap#2913
Do not test EstimateManhattanWorldFrame if LSD is disabled by @sarlinpe in colmap/colmap#2920
Custom macro for enum to string support by @B1ueber2y in colmap/colmap#2918
Bind the estimation of Sim3d by @sarlinpe in colmap/colmap#2903
Initialize glog in custom gmock main function by @ahojnnes in colmap/colmap#2916
Update ccache for faster windows CI builds by @ahojnnes in colmap/colmap#2922
Fixes for Windows ARM64 support by @ahojnnes in colmap/colmap#2921
Move geometry implementation of
__repr__,__eq__overloads to C++ side by @ahojnnes in colmap/colmap#2915Consistent interface and various improvements for pycolmap/estimators by @ahojnnes in colmap/colmap#2923
Exclude DetectLineSegments if LSD is disabled by @sarlinpe in colmap/colmap#2927
Enable reading 16bit/channel (png) images to grayscale by @Ediolot in colmap/colmap#2924
Cleanup of remaining pycolmap interfaces by @ahojnnes in colmap/colmap#2925
Fix affine SIFT feature orientation detection by @ahojnnes in colmap/colmap#2929
Improvements to deprecated pycolmap members by @sarlinpe in colmap/colmap#2932
Fix pkgconf installation in Mac CI by @ahojnnes in colmap/colmap#2936
Make sphinx show the pycolmap constructors by @sarlinpe in colmap/colmap#2935
Bind synthetic dataset functionality in pycolmap by @ahojnnes in colmap/colmap#2938
Cleaner import of C++ symbols by @sarlinpe in colmap/colmap#2933
Fix pycolmap breakage for Python 3.8 by @sarlinpe in colmap/colmap#2941
Remove legacy boost test macro by @ahojnnes in colmap/colmap#2940
Drop support for VS 2019 CI checks by @ahojnnes in colmap/colmap#2943
Fix CI cache thrashing by inconsistent vcpkg binary caching by @ahojnnes in colmap/colmap#2942
Introduce gmock Eigen matrix matchers by @ahojnnes in colmap/colmap#2939
Prevent double initialization of glog for <=0.5 by @sarlinpe in colmap/colmap#2945
Fixes and refactoring for bundle adjustment covariance estimation by @ahojnnes in colmap/colmap#2788
Fix duplicate library warnings in linking stage by @ahojnnes in colmap/colmap#2871
Add test for Python mapping pipeline by @ahojnnes in colmap/colmap#2946
Add helper script for incremental pycolmap build by @ahojnnes in colmap/colmap#2947
Fix and consistently define Qt window flags by @ahojnnes in colmap/colmap#2949
Cross platform usage of monospace font by @ahojnnes in colmap/colmap#2950
Update to latest pybind11 version by @ahojnnes in colmap/colmap#2952
Update install instructions for Mac using homebrew by @ahojnnes in colmap/colmap#2953
COLMAP 3.10 (07/23/2024)#
Add missing “include <memory>” needed for unique_ptr by @Tobias-Fischer in colmap/colmap#2338
Support decoding multi-byte characters in Python script by @jot-jt in colmap/colmap#2344
Split Dockerfile in two stages: builder and runtime. by @pablospe in colmap/colmap#2347
Dockerfile improvements by @pablospe in colmap/colmap#2356
Update VCPKG commit in Windows CI by @sarlinpe in colmap/colmap#2365
Simplify the creation of reprojection error cost functions by @sarlinpe in colmap/colmap#2364
Migrate pycolmap by @sarlinpe in colmap/colmap#2367
Rename master -> main in pycolmap CI by @sarlinpe in colmap/colmap#2370
Bind SetPRNGSeed by @sarlinpe in colmap/colmap#2369
Encapsulate freeimage usage from pycolmap in colmap bitmap by @ahojnnes in colmap/colmap#2372
Re-generate version info on git changes by @ahojnnes in colmap/colmap#2373
Consolidate colmap/pycolmap readmes, updated acknowledgements, etc. by @ahojnnes in colmap/colmap#2374
Fix crashing pycolmap CI on Windows by @sarlinpe in colmap/colmap#2383
Add costs for pose graph optimization by @sarlinpe in colmap/colmap#2378
Switch to exception checks - v2 by @sarlinpe in colmap/colmap#2376
Cleanup checks in pycolmap by @sarlinpe in colmap/colmap#2388
Add RigReprojErrorConstantRigCostFunction by @sarlinpe in colmap/colmap#2377
Add cost functions to pycolmap by @sarlinpe in colmap/colmap#2393
Fix warning C4722 by @whuaegeanse in colmap/colmap#2391
Move reconstruction IO utils to a new file by @sarlinpe in colmap/colmap#2399
Acquire the GIL before returning None by @sarlinpe in colmap/colmap#2400
Disentangle the controller from threading and integrate the new logic into IncrementalMapperController by @B1ueber2y in colmap/colmap#2392
Simplify the low-level triangulation API by @sarlinpe in colmap/colmap#2402
Initialize glog in pycolmap only if not already done by @sarlinpe in colmap/colmap#2405
Adapt all the controllers to inherit from BaseController rather than Thread (except for feature extraction and matching) by @B1ueber2y in colmap/colmap#2406
Update path to models.h in database docs by @diffner in colmap/colmap#2412
Migrate Ubuntu CI pipelines from ADO to Github by @ahojnnes in colmap/colmap#2411
Build wheels for Python 3.12 by @sarlinpe in colmap/colmap#2416
Migrate MacOS CI pipeline from ADO to Github by @ahojnnes in colmap/colmap#2418
Improve bindings of Database by @sarlinpe in colmap/colmap#2413
Migrate Windows CI pipeline from ADO to Github by @ahojnnes in colmap/colmap#2419
Reduce logging during incremental mapping by @sarlinpe in colmap/colmap#2420
Migrate Docker CI from ADO to Github, remove ADO pipelines by @ahojnnes in colmap/colmap#2422
Simplify IncrementalMapperController by @sarlinpe in colmap/colmap#2421
Fix for glog 0.7.0 by @sarlinpe in colmap/colmap#2428
Fix typo by @whuaegeanse in colmap/colmap#2430
Fix RunMapper by @whuaegeanse in colmap/colmap#2431
Do triangulation in the IncrementalMapperController by @sarlinpe in colmap/colmap#2429
Only push a new Docker image on release by @sarlinpe in colmap/colmap#2436
model aligner with type “custom” does not update reconstruction by @lpanaf in colmap/colmap#2433
Define vcpkg manifest by @ahojnnes in colmap/colmap#2426
Fix ordering of keyword arguments in pycolmap.rig_absolute_pose_estimation by @sarlinpe in colmap/colmap#2440
Reduce the build time of pycolmap by @sarlinpe in colmap/colmap#2443
Improve bindings of CorrespondenceGraph by @sarlinpe in colmap/colmap#2476
Bind Reconstruction::{SetUp,ImagePairStats} by @sarlinpe in colmap/colmap#2477
Add bindings for substeps of incremental mapper with a python example by @B1ueber2y in colmap/colmap#2478
Debug crashing VCPKG-based CI builds by @sarlinpe in colmap/colmap#2508
Upgrade to pybind11 v2.12. Fix bind_map and reconstruction.points3D by @B1ueber2y in colmap/colmap#2502
Minor fix on logging for the pycolmap customized runner by @B1ueber2y in colmap/colmap#2503
Fix missing public link deps, break circular feature-scene dependency by @ahojnnes in colmap/colmap#2497
Avoid duplicate image allocation during undistortion by @fseegraeber in colmap/colmap#2520
Fix reconstruction.points3D by @B1ueber2y in colmap/colmap#2523
Fix ‘std::out_of_range’ error when using hierarchical_mapper by @GrayMask in https://github.com/colmap/colmap/pull/2526
Fix binding for std::vector<Point2D> by @sarlinpe in colmap/colmap#2533
Include pybind eigen header by @tmnku in colmap/colmap#2510
Fix pycolmap python pipeline for multiple models by @B1ueber2y in colmap/colmap#2531
make two view geometry writable by @tmnku in colmap/colmap#2540
Customized python interface for bundle adjustment by @B1ueber2y in colmap/colmap#2509
Fix typos by @MaximSmolskiy in colmap/colmap#2553
Implicitly convert iterator to ListPoint2D by @sarlinpe in colmap/colmap#2558
Fix model_cropper not resetting image.num_points3D of cropped_rec by @ArneSchulzTUBS in colmap/colmap#2557
Split pair generation and matching by @sarlinpe in colmap/colmap#2573
Add ObservationManager by @sarlinpe in colmap/colmap#2575
Log info about created feature extractor/matcher types by @ahojnnes in colmap/colmap#2579
LSD: making the AGPL dependency optional by @zap150 in colmap/colmap#2578
Disable LSD when building pycolmap wheels by @sarlinpe in colmap/colmap#2580
Synthesize full two-view geometry and raw matches by @ahojnnes in colmap/colmap#2595
Support Adjoint matrix computation for Rigid3d by @B1ueber2y in colmap/colmap#2598
Fix cost functions for pose graph optimization by @B1ueber2y in colmap/colmap#2601
Fix python bundle adjustment example with pyceres by @B1ueber2y in colmap/colmap#2606
Faster homography estimator by @ahojnnes in colmap/colmap#2603
Add function to find real cubic polynomial roots by @ahojnnes in colmap/colmap#2609
Align with the convention of ceres doc on SqrtInformation. by @B1ueber2y in colmap/colmap#2611
Faster 7-point fundamental matrix estimator by @ahojnnes in colmap/colmap#2612
Faster 8-point fundamental matrix estimator by @ahojnnes in colmap/colmap#2613
Covariance estimation for bundle adjustment with Schur elimination by @B1ueber2y in colmap/colmap#2610
Mac OS improvements by @BSVogler in colmap/colmap#2622
Update cibuildwheel to 2.19.2 by @ahojnnes in colmap/colmap#2632
Faster essential matrix estimators by @ahojnnes in colmap/colmap#2618
Remove CamFromWorldPrior and create LocationPrior by @sarlinpe in colmap/colmap#2620
Add option to disable uninstall target, restore CI pipeline by @ahojnnes in colmap/colmap#2634
Faster covariance computation for small blocks by @B1ueber2y in colmap/colmap#2633
Fix optimal point algorithm by @morrishelle in colmap/colmap#2640
Add shell script helper for profiling by @ahojnnes in colmap/colmap#2635
Declare PosePrior::IsValid as const by @ahojnnes in https://github.com/colmap/colmap/pull/2653
Add CI build for Windows CUDA by @ahojnnes in colmap/colmap#2651
Publish windows binaries from CI by @ahojnnes in colmap/colmap#2663
COLMAP 3.9.1 (01/08/2024)#
Version 3.9 changelog by @ahojnnes in colmap/colmap#2325
Fully encapsulate freeimage in bitmap library (#2332) by @ahojnnes in colmap/colmap#2334
COLMAP 3.9 (01/06/2024)#
clang format all code and require clang-format-14 by @ahojnnes in colmap/colmap#1785
Fix compilation for vcpkg windows build by @ahojnnes in colmap/colmap#1791
Increment version number to 3.9 by @ahojnnes in colmap/colmap#1794
Remove unnecessary /arch:sse2 flag for MSVC by @ahojnnes in https://github.com/colmap/colmap/pull/1798
Updated faq.rst by @CGCooke in colmap/colmap#1801
Fixed mistake in code comment for OpenCV Fisheye camera by @CGCooke in colmap/colmap#1802
Replace deprecated cudaThreadSynchronize with cudaDeviceSynchronize by @ahojnnes in colmap/colmap#1806
Replace deprecated Cuda texture references with texture objects by @ahojnnes in colmap/colmap#1809
Remove unused SIFT GPU cuda texture reference by @ahojnnes in colmap/colmap#1823
Upgrade SiftGPU to use CUDA texture objects by @ahojnnes in colmap/colmap#1838
Remove PBA as bundle adjustment backend to support CUDA 12+ by @ahojnnes in colmap/colmap#1840
Replace deprecated CUDA sature function call by @ahojnnes in colmap/colmap#1841
Avoid unnecessary mallocs during sampling by @ahojnnes in colmap/colmap#1842
Cleaned up docker readme and scripts by @ahojnnes in colmap/colmap#1852
add “Shared intrinsics per sub-folder” checkbox to automatic reconstruction window by @kenshi84 in colmap/colmap#1853
Update vcpkg by @ahojnnes in colmap/colmap#1925
Log the name of the file that causes Mat::Read() to checkfail by @SomeAlphabetGuy in colmap/colmap#1923
check Z_index correctly in ReadPly by @countywest in colmap/colmap#1896
Don’t re-open files when reading and writing matrices by @SomeAlphabetGuy in colmap/colmap#1926
Update vcpkg to latest commit by @ahojnnes in colmap/colmap#1948
Remove unnecessary custom Eigen aligned allocator macros by @ahojnnes in colmap/colmap#1947
Prefix internal sources/includes with colmap by @ahojnnes in colmap/colmap#1949
Simplify clang-format config and sort includes by @ahojnnes in colmap/colmap#1950
Handle possible overflow in median function by @ahojnnes in colmap/colmap#1951
Run ASan pipeline under Ubuntu 22.04 by @ahojnnes in colmap/colmap#1952
Fix Ceres version test by @drkoller in colmap/colmap#1954
Fix deprecation warning for Qt font metrics width by @ahojnnes in colmap/colmap#1958
Setup clang-tidy and enable perf warnings by @ahojnnes in colmap/colmap#1959
VCPKG binary caching for windows CI by @ahojnnes in colmap/colmap#1957
Cosmetics for VS dev shell script by @ahojnnes in colmap/colmap#1965
Enable clang-tidy concurrency checks by @ahojnnes in colmap/colmap#1967
[Bug] fix finding shared points3D in FindLocalBundle by @wesleyliwei in colmap/colmap#1963
Enable compiler caching in CI by @ahojnnes in colmap/colmap#1972
Set number of features for different quality levels by @ahojnnes in colmap/colmap#1975
Specify parameter name using inline comment by @ahojnnes in colmap/colmap#1976
Fix Windows CCache by @ahojnnes in colmap/colmap#1977
Add e2e tests in CI pipeline using ETH3D datasets by @ahojnnes in colmap/colmap#1397
[feature] print verbose information for model analyzer by @wesleyliwei in colmap/colmap#1978
Add a missing include to compile with gcc13 by @EstebanDugueperoux2 in colmap/colmap#1984
Speed up snapshot construct in RigBundleAdjuster by @wesleyliwei in colmap/colmap#1988
Update outdated docker cuda image tag by @ahojnnes in colmap/colmap#1992
Add boulders ETH3D dataset to CI E2E tests by @ahojnnes in colmap/colmap#1991
Update executable paths in documentation by @ahojnnes in colmap/colmap#1993
Avoid unnecessary copy in ExtractTopScaleFeatures by @ahojnnes in colmap/colmap#1994
Move related code under new image library folder by @ahojnnes in colmap/colmap#1995
Move related code under new camera folder by @ahojnnes in colmap/colmap#1996
Added a virtual destructor to Sampler by @SomeAlphabetGuy in colmap/colmap#2000
Add a few more clang-tidy checks by @ahojnnes in colmap/colmap#2001
Move related code to new geometry module by @ahojnnes in colmap/colmap#2006
Use #pragma once as include guard by @ahojnnes in colmap/colmap#2007
Add bugprone-* clang-tidy checks by @ahojnnes in colmap/colmap#2010
Avoid const params in declarations by @ahojnnes in colmap/colmap#2011
Set and require C++14 by @ahojnnes in colmap/colmap#2012
Cleanup math functions that are now part of eigen/stdlib by @ahojnnes in colmap/colmap#2013
Add clang-analyzer checks by @ahojnnes in colmap/colmap#2014
Replace CMake provided find_package scripts and modern CMake targets by @ahojnnes in colmap/colmap#2016
Switch from Boost unit tests to Gtest by @ahojnnes in colmap/colmap#2017
Fix ccache restore keys in pipeline caching by @ahojnnes in colmap/colmap#2018
Add missing cacheHitVar to fix ccache by @ahojnnes in colmap/colmap#2020
Add missing Boost::graph import by @sarlinpe in https://github.com/colmap/colmap/pull/2021
Compressed/flattened correspondence graph for faster triangulation / less memory by @ahojnnes in colmap/colmap#2019
Fix window ccache key by @ahojnnes in colmap/colmap#2024
Consistently use shared_ptr for shared pointers for SFM objects by @ahojnnes in colmap/colmap#2023
Remove check on Qt version by @sarlinpe in colmap/colmap#2022
Synthetics for E2E incremental mapper tests by @ahojnnes in colmap/colmap#2025
New math module by @ahojnnes in colmap/colmap#2028
Simplify similarity transform and more tests by @ahojnnes in colmap/colmap#2030
Extract reconstruction alignment functions into new file by @ahojnnes in colmap/colmap#2032
Add E2E hierarchical mapper tests by @ahojnnes in colmap/colmap#2033
Rename SimilarityTransform3 to Sim3d by @ahojnnes in colmap/colmap#2034
Add Rigid3d transform class by @ahojnnes in colmap/colmap#2035
Consolidate and simplify Rigid3d and Sim3d by @ahojnnes in colmap/colmap#2037
Some small improvements/cleanup for rigid3d/sim3d usage by @ahojnnes in colmap/colmap#2041
CamFromWorld replaces qvec/tvec by @ahojnnes in colmap/colmap#2039
Retry download of ETH3D datasets by @ahojnnes in colmap/colmap#2043
WorldToImage becomes CamToImg by @ahojnnes in colmap/colmap#2044
Camera models operate on camera rays by @ahojnnes in colmap/colmap#2045
Ignore directory .vs by @whuaegeanse in colmap/colmap#2046
Use the reference of Rigid3d to reduce memory consumption by @whuaegeanse in colmap/colmap#2047
Inline point to image projection by @ahojnnes in colmap/colmap#2050
Point2D becomes simpler pure data struct by @ahojnnes in colmap/colmap#2051
Use Eigen math for estimator utils by @ahojnnes in colmap/colmap#2052
Move cost functions under geometry module and rename by @ahojnnes in colmap/colmap#2053
Bundle adjuster is an estimator by @ahojnnes in colmap/colmap#2054
Remaining base targets move to new scene module by @ahojnnes in colmap/colmap#2055
Vote and verify improvements/speedup by @ahojnnes in colmap/colmap#2056
Generate version info in .cc file to reduce number of recompilations by @ahojnnes in colmap/colmap#2057
Option manager moves to controllers to disentangle circular deps by @ahojnnes in colmap/colmap#2058
Granular CMake modules and build targets by @ahojnnes in colmap/colmap#2059
Fix docker build by @ahojnnes in colmap/colmap#2069
Remove warnings about duplicated marco NOMINMAX by @whuaegeanse in colmap/colmap#2067
lib folder becomes thirdparty folder by @ahojnnes in colmap/colmap#2068
Remove unnecessary checks in image pair conversion by @ahojnnes in colmap/colmap#2074
Replace flaky ETH3D terrace with courtyard dataset by @ahojnnes in colmap/colmap#2075
Synthesize chained match graph for more mapper tests by @ahojnnes in colmap/colmap#2076
Introduce abstract feature extractor by @ahojnnes in colmap/colmap#2077
Avoid unnecessary data copies in feature conversion utils by @ahojnnes in colmap/colmap#2078
Abstract feature matcher by @ahojnnes in colmap/colmap#2082
Encapsulate feature matching controller/worker implementations by @ahojnnes in colmap/colmap#2085
Some cosmetics for util/feature types by @ahojnnes in colmap/colmap#2084
Use std:: when cmath included by @whuaegeanse in colmap/colmap#2081
Encapsulate feature extraction controller/worker implementations by @ahojnnes in colmap/colmap#2086
Reenable VS2022 CI pipeline by @ahojnnes in colmap/colmap#1689
Consistent transform convention for CenterAndNormalizeImagePoints by @ahojnnes in colmap/colmap#2092
Retire Mac 11 CI build by @ahojnnes in colmap/colmap#2094
Add ReprojErrorConstantPoint3DCostFunction to speed up the RefineAbsolutePose function by @whuaegeanse in colmap/colmap#2089
Numeric differentiation of camera model using partial piv LU by @ahojnnes in colmap/colmap#2100
cmake: add testing.cc to colmap_util only if TESTS_ENABLED=ON by @NeroBurner in colmap/colmap#2102
Set CUDA_STANDARD to 14 by @ahojnnes in colmap/colmap#2108
Transform back to existing images positions after mapper processing if set fixed by @ferreram in colmap/colmap#2095
Update documentation with new branch policy by @ahojnnes in colmap/colmap#2110
Update CMake find dependencies for vcpkg by @ahojnnes in colmap/colmap#2116
Decouple SIFT match from two view geometry options by @ahojnnes in colmap/colmap#2118
Fix docker build by @vnmsklnk in colmap/colmap#2122
Trigger build pipeline on main branch by @ahojnnes in colmap/colmap#2123
Update Linux install documentation with new branch policy by @joshuaoreilly in colmap/colmap#2126
Fix link in camera model documentation by @CFretter in colmap/colmap#2152
[Bugfix] Fix GUI_ENABLED=OFF and skip SiftGPU if no GUI and no CUDA by @sarlinpe in colmap/colmap#2151
[Bugfix] Properly handle CGAL_ENABLED by @sarlinpe in colmap/colmap#2149
Refinement of intrinsics in the point_triangulator by @tsattler in colmap/colmap#2144
Bugfix in handling COLMAP_GPU_ENABLED by @sarlinpe in colmap/colmap#2163
Expose exe as libs by @sarlinpe in colmap/colmap#2165
Add Sim3d::FromMatrix by @sarlinpe in https://github.com/colmap/colmap/pull/2147
Check code format in CI by @ahojnnes in colmap/colmap#2171
Clean up dependencies by @sarlinpe in colmap/colmap#2173
Move tests into anonymous namespaces by @ahojnnes in colmap/colmap#2175
Fix glew/qopengl conflict warning by @ahojnnes in colmap/colmap#2176
Update documentation with new link to GitHub discussions by @ahojnnes in colmap/colmap#2177
Restore GLEW include by @sarlinpe in colmap/colmap#2178
Align reconstructions via shared 3D points by @sarlinpe in colmap/colmap#2169
Add clang-tidy-cachein CI by @ahojnnes in colmap/colmap#2182
Disable GUI build in one CI config by @ahojnnes in colmap/colmap#2181
Show verbose ccache stats by @ahojnnes in colmap/colmap#2183
Add EstimateGeneralizedAbsolutePose by @sarlinpe in colmap/colmap#2174
Fix bug in ReconstructionManagerWidget::Update by @whuaegeanse in https://github.com/colmap/colmap/pull/2186
Fix missing retrieval dependency by @ahojnnes in colmap/colmap#2189
Removing clustering_options and mapper_options in Hierarchical Mapper Controller by @Serenitysmk in colmap/colmap#2193
Publish docker image to docker hub by @ahojnnes in colmap/colmap#2195
Fix Cuda architecture in docker build by @ahojnnes in colmap/colmap#2196
Fix all-major cuda arch missing in CMake < 3.23 by @ahojnnes in colmap/colmap#2197
Update triangulation.cc by @RayShark0605 in colmap/colmap#2205
Update author and acknowledgements by @ahojnnes in colmap/colmap#2207
Code formatting for Python by @ahojnnes in colmap/colmap#2208
Retire outdated build script by @ahojnnes in colmap/colmap#2217
Remove mention of deprecated build script by @sarlinpe in colmap/colmap#2220
Improve word spelling by @zchrissirhcz in colmap/colmap#2235
Stack allocate camera param idx arrays by @ahojnnes in colmap/colmap#2234
fix: typo in colmap/src/colmap/ui/project_widget.cc by @varundhand in colmap/colmap#2241
Update reconstruction.cc by @RayShark0605 in colmap/colmap#2238
Update to Docker CUDA 12.2.2 by @ahojnnes in colmap/colmap#2244
Stop setting C++ standard flags manually by @AdrianBunk in colmap/colmap#2251
Setting clear_points to true per default in point_triangulator by @tsattler in colmap/colmap#2252
Update cameras.rst to fix link to code by @tsattler in colmap/colmap#2246
Fix matching of imported features without descriptors by @ahojnnes in colmap/colmap#2269
Consistent versioning between documentation and code by @ahojnnes in colmap/colmap#2275
Reduce mallocs for RANSAC estimator models by @ahojnnes in colmap/colmap#2283
Migrate to glog logging by @ahojnnes in colmap/colmap#2172
Turn Point3D into simple data struct by @ahojnnes in colmap/colmap#2285
Camera becomes simple data struct by @ahojnnes in colmap/colmap#2286
Recover custom Eigen std::vector allocator for Eigen <3.4 support by @ahojnnes in https://github.com/colmap/colmap/pull/2293
Replace result_of with invoke_result_t by @sarlinpe in colmap/colmap#2300
Allow getters FocalLength{X,Y} for isotropic models by @sarlinpe in colmap/colmap#2301
Add missing Boost targets and cleanup includes by @sarlinpe in colmap/colmap#2304
Expose IncrementalMapperOptions::{mapper,triangulation} by @sarlinpe in colmap/colmap#2308
Update install instructions for Mac by @Dawars in colmap/colmap#2310
Remove unused ceres reference in doc by @ahojnnes in colmap/colmap#2315
Fix typo by @whuaegeanse in colmap/colmap#2317
Stable version 3.9 release by @ahojnnes in colmap/colmap#2319
COLMAP 3.8 (01/31/2023)#
Updating geo-registration doc. by @ferreram in colmap/colmap#1410
Adding user-specified option for reconstructing purely planar scene. … by @ferreram in colmap/colmap#1408
Only apply sqlite vacuum command when elements are deleted from the database. by @ferreram in colmap/colmap#1414
Replace Graclus with Metis dependency by @ahojnnes in colmap/colmap#1422
Update ceres download URL in build script by @whuaegeanse in colmap/colmap#1430
Fix type errors when building colmap with build.py in windows by @whuaegeanse in colmap/colmap#1440
Fix bug in the computation of the statistics Global/Local BA by @whuaegeanse in colmap/colmap#1449
Add RefineGeneralizedAbsolutePose and covariance estimation by @Skydes in colmap/colmap#1464
Update docker image definition by @ahojnnes in colmap/colmap#1478
Upgrade deprecated ceres parameterizations to manifolds by @ahojnnes in colmap/colmap#1477
Use masks for stereo fusion on automatic reconstruction by @ibrarmalik in colmap/colmap#1488
fix random seed set failed from external interface by @WZG3661 in colmap/colmap#1498
Replace deprecated Eigen nonZeros() call for most recent Eigen versions. by @nackjaylor in colmap/colmap#1494
Fix ceres-solver folder name by @f-fl0 in colmap/colmap#1501
Improved convergence criterion for XYZ to ELL conversion by @ahojnnes in colmap/colmap#1505
Fix bug in the function SetPtr of Bitmap by @whuaegeanse in colmap/colmap#1525
Avoid the calling of copy constructor/assignment by @whuaegeanse in colmap/colmap#1524
Avoid calling copy constructors of FeatureKeypoints and FeatureDescriptors by @whuaegeanse in colmap/colmap#1540
Initialize freeimage if statically linked by @ahojnnes in colmap/colmap#1549
Avoid hard crash if Jacobian matrix is rank deficient by @mihaidusmanu in colmap/colmap#1557
visualize_model.py: added FULL_OPENCV model by @soeroesg in colmap/colmap#1552
Update vcpkg version to fix CI pipeline by @ahojnnes in colmap/colmap#1568
Replace deprecated Mac OS 10.15 with Mac OS 12 build in CI by @ahojnnes in colmap/colmap#1569
Fix inconsistent between the actual executed image reader option and the saved project.ini file by @XuChengHUST in colmap/colmap#1564
checkout the expected version of ceres solver by @scott-vsi in colmap/colmap#1576
use default qt5 brew install directory #1573 by @catapulta in colmap/colmap#1574
Fix image undistortion with nested image folders by @ahojnnes in colmap/colmap#1606
Fix source file permissions by @ahojnnes in colmap/colmap#1607
Fixed the collection of arguments in colmap.bat by @tdegraaff in colmap/colmap#1121
Add OpenMP to COLMAP_EXTERNAL_LIBRARIES if enabled by @logchan in colmap/colmap#1632
Fix output tile reconstructions are the same as the input reconstruction in RunModelSplitter (#1513) by @Serenitysmk in colmap/colmap#1531
add libmetis-dev to solve METIS_INCLUDE_DIRS. by @FavorMylikes in colmap/colmap#1672
Update install.rst by @tomer-grin in colmap/colmap#1671
Update freeimage links. by @Yulv-git in colmap/colmap#1675
fix small typo by @skal65535 in colmap/colmap#1668
Update build.py with new glew link by @aghand0ur in colmap/colmap#1658
Add use_cache in fusion options GUI by @hrflr in colmap/colmap#1655
Add CI pipeline for Ubuntu 22.04 by @ahojnnes in colmap/colmap#1688
Avoid unnecessary copies of data by @ahojnnes in colmap/colmap#1691
Reduce memory allocations in correspondence graph search by @ahojnnes in colmap/colmap#1692
Use FindCUDAToolkit when available. by @hanseuljun in colmap/colmap#1693
Fixed a crash due to inconsistent undistortion by @SomeAlphabetGuy in colmap/colmap#1698
Add CUDA Ubuntu 22.04 CI build by @ahojnnes in colmap/colmap#1705
Delete the redundancy install of libmetis-dev by @thomas-graphopti in colmap/colmap#1721
Fix broken loading of image masks on macOS by @buesma in colmap/colmap#1639
Update install instructions with latest hints and known issues by @ahojnnes in colmap/colmap#1736
Modernize smart pointer initialization, fix alloc/dealloc mismatch by @ahojnnes in colmap/colmap#1737
Fix typo in cli.rst by @ojhernandez in colmap/colmap#1747
Fix inconsistent image resizing between CPU/GPU implementations of SIFT by @Yzhbuaa in colmap/colmap#1642
Reduce number of SIFT test features to make tests run under WSL by @ahojnnes in colmap/colmap#1748
Tag documentation version with dev by @ahojnnes in colmap/colmap#1749
Update copyright to 2023 by @ahojnnes in colmap/colmap#1750
Fix max image dimension for positive first_octave by @ahojnnes in colmap/colmap#1751
Fix SIFT GPU match creation by @ahojnnes in colmap/colmap#1757
Fix SIFT tests for OpenGL by @ahojnnes in colmap/colmap#1762
Suppress CUDA stack size warning for ptxas by @ahojnnes in colmap/colmap#1770
Simplify CUDA CMake configuration by @ahojnnes in colmap/colmap#1776
Fixes for CUDA compilation by @ahojnnes in colmap/colmap#1777
Improvements to dockerfile and build pipeline by @ahojnnes in colmap/colmap#1778
Explicitly require CMAKE_CUDA_ARCHITECTURES to be defined by @ahojnnes in colmap/colmap#1781
Depend on system installed FLANN by @ahojnnes in colmap/colmap#1782
Option to store relative pose between two cameras in database by @yanxke in colmap/colmap#1774
Depend on system installed SQLite3 by @ahojnnes in colmap/colmap#1783
COLMAP 3.7 (01/26/2022)#
Allow to save fused point cloud in colmap format when using command line by @boitumeloruf in colmap/colmap#799
Fix typos in image.h by @Pascal-So in colmap/colmap#936
Fix for EPnP estimator by @vlarsson in colmap/colmap#943
Visualize models using Python in Open3D by @ahojnnes in colmap/colmap#948
Update tutorial.rst by @ignacio-rocco in colmap/colmap#953
8 point algorithm internal contraint fix by @mihaidusmanu in colmap/colmap#982
Python script for writing depth/normal arrays by @SBCV in colmap/colmap#957
BuildImageModel: use std::vector instead of numbered arguments by @Pascal-So in https://github.com/colmap/colmap/pull/949
Fix bugs of sift feature matching by @whuaegeanse in colmap/colmap#985
script for modifying fused results by @SBCV in colmap/colmap#984
fix camera model query by @Pascal-So in colmap/colmap#997
fixed small bug in visualize_model.py by @sniklaus in colmap/colmap#1007
Update .travis.yml by @srinivas32 in colmap/colmap#989
Ensure DecomposeHomographyMatrix() always returns rotations by @daithimaco in colmap/colmap#1040
Remove deprecated qt foreach by @UncleGene in colmap/colmap#1039
Fix AMD/Windows GUI visualization bug by @drkoller in colmap/colmap#1079
include colmap_cuda in COLMAP_LIBRARIES when compiled with cuda by @ClementPinard in colmap/colmap#1084
Fix runtime crash when sparsesuite is missing from ceres by @anmatako in colmap/colmap#1115
Store relative poses in two_view_geometry table by @Ahmed-Salama in colmap/colmap#1103
search src images for patch_match from all set, not only referenced subset by @DaniilSNikulin in colmap/colmap#1038
Replace Travis CI with Azure Pipelines for Linux/Mac builds by @ahojnnes in colmap/colmap#1119
Allow ReadPly to handle double precision files by @anmatako in colmap/colmap#1131
Update GPSTransform calculations to improve accuracy by @anmatako in colmap/colmap#1132
Add scale template flag in SimilarityTransform3::Estimate by @anmatako in https://github.com/colmap/colmap/pull/1133
Add CopyFile utility that can copy or hard/soft-link files by @anmatako in colmap/colmap#1134
Expose BA options in IncrementalMapper by @anmatako in colmap/colmap#1139
Allow configurable paths for mvs::Model by @anmatako in https://github.com/colmap/colmap/pull/1141
Change ReconstructionMaanger to write larger recons first by @anmatako in colmap/colmap#1137
Setup Azure pipelines for Windows build by @ahojnnes in colmap/colmap#1150
Add fixed extrinsics in rig config by @anmatako in colmap/colmap#1144
Allow custom config and missing dependencies for patch-match by @anmatako in colmap/colmap#1142
Update print statements for Python 3 compatibility by @UncleGene in colmap/colmap#1126
Allow cleanup of SQLite tables using new database_cleaner command by @anmatako in colmap/colmap#1136
Extend SceneClustering to support non-hierarchical (flat) clusters by @anmatako in colmap/colmap#1140
Support more formats in model_converter by @anmatako in colmap/colmap#1147
Fix Mac 10.15 build due to changed Qt5 path by @ahojnnes in colmap/colmap#1157
Fix bug in ReadCameraRigConfig when reading extrinsics by @anmatako in colmap/colmap#1158
Add utility to compare poses between two sparse models by @ahojnnes in colmap/colmap#1159
Modularize executable main functions into separate sources by @ahojnnes in colmap/colmap#1160
Fix unnecessary copies in for range loops by @ahojnnes in colmap/colmap#1162
Add script to clang-format all source code by @ahojnnes in colmap/colmap#1163
Add back new options and formats for model_converter by @anmatako in colmap/colmap#1164
ImageReder new option and bug fix in GPS priors by @anmatako in colmap/colmap#1146
Parallelize stereo fusion; needs pre-loading of entire workspace by @anmatako in colmap/colmap#1148
Refactoring and new functionality in Reconstruction class by @anmatako in colmap/colmap#1169
Add new functionality in image_undistorter by @anmatako in colmap/colmap#1168
Add new CMake option to disable GUI by @anmatako in colmap/colmap#1165
Fix the memory leak caused by not releasing the memory of the PRNG at the end of the thread by @whuaegeanse in colmap/colmap#1170
Fix fusion segfault bug by @anmatako in colmap/colmap#1176
Update SiftGPU to use floorf for floats by @anmatako in colmap/colmap#1182
fix typo in extraction.cc by @iuk in colmap/colmap#1191
Improvements to NVM, Cam, Recon3D, and Bundler exporters by @drkoller in colmap/colmap#1187
Update model_aligner functionality by @anmatako in colmap/colmap#1177
Add new model_cropper and model_splitter commands by @anmatako in colmap/colmap#1179
use type point2D_t instead of image_t by @iuk in colmap/colmap#1199
Fix radial distortion in Cam format exporter by @drkoller in colmap/colmap#1196
Add new model_transformer command by @anmatako in colmap/colmap#1178
Fix error of using urllib to download eigen from gitlab by @whuaegeanse in colmap/colmap#1194
Multi-line string fix in Python model script by @mihaidusmanu in colmap/colmap#1217
added visibility_sigma to CLI input options for delaunay_mesher. by @Matstah in colmap/colmap#1236
Backwards compatibility of model_aligner by @tsattler in colmap/colmap#1240
[update undistortion] update dumped commands by @hiakru in colmap/colmap#1276
Compute reprojection error in generalized absolute solver by @Skydes in colmap/colmap#1257
Modifying scripts/python/flickr_downloader.py to create files with correct extensions by @snavely in colmap/colmap#1275
revise Dockerfile and readme. by @MasahiroOgawa in colmap/colmap#1281
Update to latest vcpkg version by @ahojnnes in colmap/colmap#1319
Fix compiler warnings reported by GCC by @ahojnnes in colmap/colmap#1317
Auto-rotate JPEG images based on EXIF orientation by @ahojnnes in colmap/colmap#1318
Upgrade vcpkg to fix CI build issues by @ahojnnes in colmap/colmap#1331
Added descriptor normalization argument to feature_extractor. by @mihaidusmanu in colmap/colmap#1332
Fix memory leak in the function of StringAppendV by @whuaegeanse in colmap/colmap#1337
Add CUDA_SAFE_CALL to cudaGetDeviceCount. by @chpatrick in colmap/colmap#1334
Add missing include in case CUDA/GUI is not available by @ahojnnes in colmap/colmap#1329
Fix wrong WGS84 model and test cases in GPSTransform by @Freeverc in colmap/colmap#1333
Fixes bug in sprt.cc: num_inliers was not set. by @rmbrualla in colmap/colmap#1360
Prevent a divide by zero corner case. by @rmbrualla in colmap/colmap#1361
Adds missing header. by @rmbrualla in colmap/colmap#1362
Require Qt in COLMAPConfig only if GUI is enabled by @Skydes in colmap/colmap#1365
Keep precision in the process of storing in text. by @whuaegeanse in colmap/colmap#1363
Expose exe internals by @Skydes in colmap/colmap#1366
Fix inliers matches extraction in EstimateUncalibrated function. by @ferreram in colmap/colmap#1369
Expose exe internals - fix by @Skydes in colmap/colmap#1368
Remove deprecated Mac OSX 10.14 image in ADO pipeline by @ahojnnes in colmap/colmap#1383
Add Mac OSX 11 ADO pipeline job by @ahojnnes in colmap/colmap#1384
Fix warnings for latest compiler/libraries by @ahojnnes in colmap/colmap#1382
Fix clang compiler warnings by @ahojnnes in colmap/colmap#1387
Add Address Sanitizer options and fix reported issues by @ahojnnes in colmap/colmap#1390
User/joschonb/asan cleanup by @ahojnnes in colmap/colmap#1391
Add ADO pipeline for Visual Studio 2022 by @ahojnnes in colmap/colmap#1392
Add ccache option by @ahojnnes in colmap/colmap#1395
Update ModelAligner to handle GPS and custom coords. and more by @ferreram in colmap/colmap#1371
COLMAP 3.6 (07/24/2020)#
Improved robustness and faster incremental reconstruction process
Add
image_deletercommand to remove images from sparse modelAdd
image_filtercommand to filter bad registrations from sparse modelAdd
point_filteringcommand to filter sparse model point cloudsAdd
database_mergercommand to merge two databases, which is useful to parallelize matching across different machinesAdd
image_undistorter_standaloneto enable undistorting images without a pre-existing full sparse modelImproved 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.ccexecutable. The GUI can now be started using the commandcolmap guiand other commands are available ascolmap [command]. For example, the feature extractor is now available ascolmap 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.htmlMore 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.