# Releases¶

## 0.7.0¶

### New Features¶

• Camera intrinsics may be shared among multiple cameras.
• New CameraIntrinsicsModel class allows users to specify new camera models for SfM. All camera models seamlessly integrate into Theia’s pipelines.
• Large restructure of camera class for increased modularity. The Camera class can now set its parameters from camera intrinsics priors, and more.
• Image undistortion module will remove radial distortion from images and features.
• 3d-3d alignment may now utilize weights per correspondence (thanks @nosleduc).
• New guided matching capability (based on Rajvi Shah’s work).
• Versioning for serialization to provide backwards compatability.
• Added the ability to specify minimum track length for triangulation.
• Remove CImg from the library and add external dependency OpenImageIO.
• Position or orientation may be independently set to constant during BA. This is useful for Global SfM methods.
• Thresholds for incremental SfM are now resolution independent, leading to better quality when there is a variety of image resolutions in the dataset.
• Feature extraction is skipped if the feature file is already present. This allows us to perform matching without feature extraction during SfM.

### Bug Fixes¶

• Fixed c++11 detection for MSVC.
• Many more CMake and other minor bugs for MSVC compilation (thanks to @MikePelton).
• Fixed a bug in the localization for incremental SfM that accidentally added under-constrained images to the reconstruction.
• Fixed a bug in the Normalized Cut module (thanks @cqd123123).

### Misc.¶

• New RandomNumberGenerator class is used so that all randomized operations may be seeded. This gives better stability to unit tests (via fixed seeds) and allows users repeatability during SfM.
• Unit tests for incremental reconstruction.
• Updated the default SfM parameters for better reconstructions.
• GPS information added to camera intrinsics priors.
• Reconstruction normalization is no longer based on a RANSAC method and is now deterministic.

## 0.6.0¶

### New Features¶

• Users can now specify which intrinsics to optimize (using bitmask operators) during bundle adjustment.
• TrackEstimator can now estimate specific tracks (used for incremental SfM).
• Features can be read/written from/to files.
• Matching features can now utilize feature files (so that out-of-core matching can be done).
• Improved SVD efficiency for the 5 point alg.
• 2-view geometric verification takes in the 3D points for BA as input.
• Homographies are now computed during geometric verification
• Homography inlier count is used to choose a better initial pair for Incremental SfM.
• Robust cost functions may now be used for Bundle Adjustment
• Method to estimate a dominant plane from points (by bnuernberger).
• L1 solver now uses the ADMM method. This results in problems that are generally better conditioned and are much faster at scale.
• Reconstructions now can store and compute colors of 3D points.
• Support for reading and writing NVM files (Visual SfM’s default format).
• Defaults polynomial solver is now Jenkins Traub method using the RPolyPlusPlus implementation.
• Global rotations solvers use a minimum spanning tree to initialize the global orientations.
• Robust cost functions and camera intrinsic optimizations can be used for any type of Bundle Adjustment (not just global BA).
• Least Unsquared Deviations position estimation uses the proper QP method for solving.

### Bug Fixes¶

• Several bug fixes for Windows (thanks to Jonas Scheer and others).
• 2-view BA properly holds the camera’s extrinsic parameters constant.
• No pointers are used anymore in the cascade hasher. This prevent rarely occuring segfaults.
• Position estimation now fails when view_pairs is empty (thanks to vfragoso).
• Cascade Hasher works properly with zero descriptors (thanks to anfractuosity).
• Root-SIFT handles zero-norm vectors properly.
• Cascade Hasher initializes properly (thanks to anfractuosity).
• Robust rotations solver initializes the sparse matrix from a triplet list. This results in a dramatic speedup for large scale problems.

### Misc.¶

• Incremental SfM will now exit early if no suitable initial pair can be found
• Computing the maximal parallel rigid subgraph only considers views that are in the largest connected component
• RemovesDisconnectedViewPairs now returns the views that were removed
• Only compute HashedImages once per image (for out of core matching)
• Triangulation algorithms return true on success properly
• The point cloud viewer uses the dominant plane detection to set the ground plane for viewing.
• New CHOLMOD wrapper for sparse cholesky decomposition. This provides a notable performance increase for large scale problems.

## 0.5.0¶

### New Features¶

• Jenkins Traub polynomial root-finding algorithm.
• Cereal library is now used for all I/O.
• Feature matching can now be done in-core or out-of-core.
• Global SfM was completely refactored to be split into RotationEstimator and PositionEstimator classes. This makes implementing new algs straightforward with automatic integration.
• Least unsquared deviations position estimator.
• Linear rotation estimator.
• Extract maximal parallel subgraphs to determine well-constrained positions for estimation.
• Two point algorithm for absolute pose with known vertical direction.
• LMeds (vfragoso).
• Normalized graph cuts (to be used in the future for hiearchical SfM).
• Massively updated flags files for building reconstructions.
• Ability to specify which image pairs to match.

### Bug Fixes¶

• Disable the unit tests for Optimo (thanks to bvanavery).
• Tons of Windows compilation fixes.
• Bundler file I/O fixes (thanks rajvi).
• Fix potential divide by zeros in the RANSAC interface (thanks to klemmster).

### Misc.¶

• Refactoring of the polynomial root-finding algorithms to make the files easier to follow.
• Improved CMake files (thanks to Ceres authors).
• Removed all binary descriptors. This makes the descriptor interfaces much less of a headache.

## 0.4.0¶

### New Features¶

• Incremental SfM pipeline.
• New website: www.theia-sfm.org.
• Linear method for camera pose registration [JiangICCV].
• Better rendering for point clouds.
• Significantly better Cmake scripts for Windows (thanks to bvanevery for testing)
• Mutable priority queue class.
• Bundle adjustment method for cameras only (points held constant).
• Calibrated and Uncalibrated absolute pose estimators.
• Two-view bundle adjustment will now optimize camera intrinsics if they are not known.
• New small and large-scale benchmarking results on the Theia website.

### Bug Fixes¶

• Some Visual Studio bugs and incompatabilities (thanks to Pierre Moulon and Brojeshwar Bhowmick).
• Sample Consensus estimators were incorrectly counting the number of samples needed (found by inspirit).
• Proper normalization the 1dSfM axis of projection.
• OpenGL viewer properly sets zero-values of matrices upon initialization.
• Relative translation optimization (with known rotation) is dramatically improved (thanks to Onur Ozyesil)
• Translations solver uses SPARSE_NORMAL_CHOLESKY when no 3D points are used.

## 0.3.0¶

### New Features¶

• All cameras are calibrated from EXIF or a median focal length.
• Triangulation is set to use the midpoint method by default.
• All operations on two-view geometry directly operate on the view graph.
• Power method for computing the dominant eigenvector of densor or sparse matrices.
• New program to verify the 1dsfm input against the ground truth model.
• New program to compare two SfM models.
• Nonlinear position estimation uses the nonlinear solver of [WilsonECCV2014].
• Removed confusing CameraIntrinsics struct and now all methods use CameraIntrinsicsPrior.
• Calibration files now accept radial distortion and all other camera intrinsics.
• Several new applications to evaluate model and matching quality.
• Robust reconstruction alignment (using RANSAC) to align reconstruction with potential outliers.
• Ability to normalize reconstructions to approximately center and scale nicely for viewing.

### Bug Fixes¶

• 1dSfM dataset input was previously mal-formed.
• Two-view bundle adjustment will no longer use poorly triangulated points for optimization.
• Installation to user-specified folder is done properly.
• Viewing angle test for triangulation.
• Properly estimating relative pose of partially calibrated image matches.

## 0.2.0¶

### New Features¶

• L1 Solver
• Robust Rotation Solver of [ChatterjeeICCV13]
• Gflags can now have any namespace
• Reconstructions viewer is now improved
• Initializing rotations from a view graph now use the maximum spanning tree instead of a random spanning tree
• only_calibrated_views will only use calibrated views (from EXIF or elsewhere) for building a reconstruction.
• reconstruct_largest_connected_component will only build the largest connected component of the model instead of building as many models as possible.
• 1dSfM datasets [WilsonECCV2014] now can be input properly (no quality guarantees on the reconstructions though)
• PLY files can be written from a Reconstruction (3D points are all black at this point)

### Bug Fixes¶

• Bug fix: removing disconnected view pairs
• Bug fix: 1dSfM filtering of [WilsonECCV2014] uses a gaussian distribution to randomly sample axis of projections.
• Lowes ratio is fixed.
• Proper hash function for std::pairs (inspiration from Boost)
• Fix BRISK compiler warning for GCC 4.9.1
• Reconstruction viewer bugs and controls are improved
• Better memory management for descriptor extraction and matching

Initial release.