Home | History | Annotate | Download | only in source
      1 .. _chapter-introduction:
      2 
      3 ============
      4 Introduction
      5 ============
      6 
      7 Solving nonlinear least squares problems [#f1]_ comes up in a broad
      8 range of areas across science and engineering - from fitting curves in
      9 statistics, to constructing 3D models from photographs in computer
     10 vision. Ceres Solver [#f2]_ [#f3]_ is a portable C++ library for
     11 solving non-linear least squares problems accurately and efficiently.
     12 
     13 **Features**
     14 
     15 #. A friendly :ref:`chapter-modeling` API.
     16 
     17 #. Automatic and numeric differentiation.
     18 
     19 #. Robust loss functions and local parameterizations.
     20 
     21 #. Multithreading.
     22 
     23 #. Trust-Region (Levenberg-Marquardt and Dogleg) and Line Search
     24    (Nonlinear CG and L-BFGS) solvers.
     25 
     26 #. Variety of linear solvers.
     27 
     28    a. Dense QR and Cholesky factorization (using `Eigen
     29       <http://eigen.tuxfamily.org/index.php?title=Main_Page>`_) for
     30       small problems.
     31 
     32    b. Sparse Cholesky factorization (using `SuiteSparse
     33       <http://www.cise.ufl.edu/research/sparse/SuiteSparse/>`_ and
     34       `CXSparse <http://www.cise.ufl.edu/research/sparse/CSparse/>`_) for
     35       large sparse problems.
     36 
     37    c. Specialized solvers for bundle adjustment problems in computer
     38       vision.
     39 
     40    d. Iterative linear solvers with preconditioners for general sparse
     41       and bundle adjustment problems.
     42 
     43 #. Portable: Runs on Linux, Windows, Mac OS X and Android.
     44 
     45 
     46 At Google, Ceres Solver has been used for solving a variety of
     47 problems in computer vision and machine learning. e.g., it is used to
     48 to estimate the pose of Street View cars, aircrafts, and satellites;
     49 to build 3D models for PhotoTours; to estimate satellite image sensor
     50 characteristics, and more.
     51 
     52 `Blender <http://www.blender.org>`_ uses Ceres for `motion tracking
     53 <http://mango.blender.org/development/planar-tracking-preview/>`_ and
     54 `bundle adjustment
     55 <http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.67/Motion_Tracker>`_.
     56 
     57 
     58 .. rubric:: Footnotes
     59 
     60 .. [#f1] For a gentle but brief introduction to non-linear least
     61          squares problems, please start by reading the
     62          :ref:`chapter-tutorial`.
     63 
     64 .. [#f2] While there is some debate as to who invented the method of
     65          Least Squares [Stigler]_, there is no debate that it was
     66          `Carl Friedrich Gauss
     67          <http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss>`_ who
     68          brought it to the attention of the world. Using just 22
     69          observations of the newly discovered asteroid `Ceres
     70          <http://en.wikipedia.org/wiki/Ceres_(dwarf_planet)>`_, Gauss
     71          used the method of least squares to correctly predict when
     72          and where the asteroid will emerge from behind the Sun
     73          [TenenbaumDirector]_. We named our solver after Ceres to
     74          celebrate this seminal event in the history of astronomy,
     75          statistics and optimization.
     76 
     77 .. [#f3] For brevity, in the rest of this document we will just use
     78          the term Ceres.
     79 
     80 
     81 
     82