(1)Ceres Solver
步骤
(1)编写CostFunction结构体。必须重载运算符(),必须使用模板类型,所有输入参数和输出参数都使用模板类型。
(2)构造一个求解非线性最小二乘法的Problem来进行未知数求解。
(1)魏尔斯特拉斯函数(Weierstrass function)
其中$0<a<1$,$b$为正奇数,且满足$ab>1+\frac{3}{2} \pi$
(2)Weierstrass图像绘制
(3)步骤
(3.1)构造数据。设置参数$a=0.3, b=7, n=200$ 。
(3.2)编写CostFunction结构体。
(3.3)构造一个求解非线性最小二乘法的Problem来进行未知数求解。
(4)总结
(4.1)利用ceres无法对非线性函数进行曲线拟合,如魏尔斯特拉斯函数。原因包括两点:函数无法进行微分求解和初始点难以选取。
(4.2)此处改为ceres对$y=e^{ax^{2}+b}$函数进行曲线拟合,其中
(4.3)可以采用三种方法对问题进行求解,即:在进行Problem构建时,采用AutoDiffCostFunction或NumericDiffCostFunction进行数值微分求解;当无法使用模板来创建costfunctor时,继承SizedCostFunction类来实现Problem。
(1)共线方程
其中$x_{0}, y_{0}, f$已知,$abc$为旋转矩阵,可以利用$\phi, \omega, \kappa$表示如下:
(2)步骤
(2.1)读入数据,格式为$(x, y, X, Y, Z)$ 。前2维像素坐标—单位$mm$ ,后三维代像坐标—单位$m$ 。
(2.2)编写CostFunction结构体。
(2.3)构造一个求解非线性最小二乘法的Problem来进行未知数求解。
(3)运行结果
(1)数学表达式
其中:
(2)Powell's Quartic Function分解
(3)最优化问题数学描述
(4)步骤
(4.1)编写CostFunction结构体。
(4.2)构造一个求解非线性最小二乘法的Problem来进行未知数求解。
(5)运行结果
(1)BA数据集
Bundle Adjustment in the Large
备注:此处使用Ladybug Dataset:problem-49-7776-pre.txt.bz2
(2)BA问题
ceres solver学习之bundle adjustment
(3)步骤
(3.1)读取problem-49-7776-pre.txt.bz2数据。
(3.2)编写CostFunction结构体。
(3.3)构造一个求解非线性最小二乘法的Problem来进行未知数求解。
(4)运行结果