Solving non-linear least squares problems comes up in a broad range of areas across science and engineering - from fitting complicated curves in statistics, to constructing 3D models from photographs in computer vision. Today we're happy to announce the release of a solver we use at Google.

Ceres Solver is a portable C++ library that allows for modeling and solving large complex nonlinear least squares problems. The notable features are:
A simple, expressive API
Automatic differentiation
Robust loss functions
Local parameterizations
A threaded Jacobian evaluators and linear solvers
Dense QR factorization (using Eigen) for small problems
Sparse Cholesky factorization (using SuiteSparse) for large sparse problems
Specialized solvers for problems in 3D computer vision
A liberal license (New BSD)
Scales from servers to cell phones.

We use Ceres Solver at Google to estimate the pose of Street View cars, aircrafts, and satellites; to build 3D models for PhotoTours; to estimate satellite image sensor characteristics, and more. For example, the video below shows three instances of Ceres Solver fusing data from the sensors mounted on a Street View car to estimate its correct position and orientation on the surface of earth.



We hope you will download the code, solve some problems, and share your experiences on the mailing list.

By Sameer Agarwal & Keir Mierle, Geo Software Engineers