64 /** Sparse Levenberg-Marquart solution to bundle adjustment - optimizes all the camera frames & the landmark locations.
65 * At input a gross estimation of the frame poses & the landmark points must be supplied. If you don't have such a
66 * starting point, use mrpt::vision::ba_initial_estimate() to compute it.
67 *
68 * At output the best found solution will be returned in the variables. Optionally, a functor can be passed for having
69 * feedback on the progress at each iteration (you can use it to refresh a GUI, display a progress bar, etc...).
70 *
71 * This implementation is almost entirely an adapted version from RobotVision (at OpenSLAM.org) (C) by Hauke Strasdat (Imperial College London), licensed under GNU LGPL.
72 * See the related paper: H. Strasdat, J.M.M. Montiel, A.J. Davison: "Scale Drift-Aware Large Scale Monocular SLAM", RSS2010, http://www.roboticsproceedings.org/rss06/p10.html
73 *
74 * List of optional parameters in "extra_params":
75 * - "verbose" : Verbose output (default=0)
76 * - "max_iterations": Maximum number of iterations to run (default=50)
77 * - "robust_kernel": If !=0, use a robust kernel against outliers (default=1)
78 * - "kernel_param": The pseudo-huber kernel parameter (default=3)
79 * - "mu": Initial mu for LevMarq (default=-1 -> autoguess)
80 * - "num_fix_frames": Number of first frame poses to don't optimize (keep unmodified as they come in) (default=1: the first pose is the reference and is not modified)
81 * - "num_fix_points": Idem, for the landmarks positions (default=0: optimize all)
82 * - "profiler": If !=0, displays profiling information to the console at return.
83 *
84 * \note In this function, all coordinates are absolute. Camera frames are such that +Z points forward from the focal point (see the figure in mrpt::slam::CObservationImage).
85 * \note The first frame pose will be not updated since at least one frame must remain fixed.
86 *
87 * \param observations [IN] All the feature observations (WITHOUT distortion), indexed by feature ID as lists of <frame_ID, (x,y)>. See TSequenceFeatureObservations.
88 * \param camera_params [IN] The camera parameters, mainly used for the intrinsic 3x3 matrix. Distortion params are ignored since it's assumed that \a observations are already undistorted pixels.
89 * \param frame_poses [IN/OUT] Input: Gross estimation of each frame poses. Output: The found optimal solution.
90 * \param landmark_points [IN/OUT] Input: Gross estimation of each landmark point. Output: The found optimal solution.
91 * \param extra_params [IN] Optional extra parameters. Read above.
92 * \param user_feedback [IN] If provided, this functor will be called at each iteration to provide a feedback to the user.
113 /** Fills the frames & landmark points maps with an initial gross estimate from the sequence \a observations, so they can be fed to bundle adjustment methods.