ceres主要用于解决非线性最小二乘问题和通用的无约束最小化问题
Non-linear Least Squares
解决形如左侧的非线性最小二乘法问题
- 加和中的项取名为ResidualBlock残差块,其中f表示依赖于参数块xi的CostFunction。[xi1, xi2, …, xik]叫做ParameterBlock参数块
- ρi是Loss Function,用于减小outliers对于非线性最小二乘法带来的影响,是一个数值函数
- 在ceres中使用了仿函数functor,即使用时像函数一样的被调用,由该仿函数产生一个对象,并以此对象作为算法的一个参数。类别定义中必须自定义仿函数云算子operator(),这之后就可以在仿函数的对象后面加上一对小括号,以此调用仿函数所定义的operator(),这个operator()将在类实例化时被用到,非参数的元素传入类中,这样就免去了一些对公共变量的全局化的维护
- 定义了CostFunctor以后,CostFunction* cost_function = new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor); 这个AutoDiffCostFunction将会以CostFunctor作为输入,然后自动对其进行微分,同时给予它一个CostFunction接口
- CostFunctor是用于计算a vector of residuals and Jacobian matrices。即这个损失函数是用于计算向量f(x1, …, xk)和Jacob