# 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.
- PinholeRadialTangentialCameraModel, FisheyeCameraModel, and FOVCameraModel classes have been added.
- 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.
- AKAZE feature detector/descriptor added.
- 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).
- A new Quadratic Programming module that uses the ADMM method.
- 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.
- Upgraded EasyEXIF lib to the latest version.
- 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.
- Updated VLFeat to the latest version.

## 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.
- GFlags now links pthreads properly.
- 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
- Additional run-time options added for building reconstructions
`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

## 0.1.0¶

Initial release.