Ceres Learning

githut

0 参考资料

(1)Ceres Solver

(2)Ceres-Solver学习笔记(1)

(3)Ceres-Solver学习笔记(2)

(4)Ceres-Solver学习笔记(3)

(5)Ceres-Solver学习笔记(4)

(6)Ceres-Solver学习笔记(5)

(7)Ceres-Solver学习笔记(6)

(8)Ceres-Solver学习笔记(7)

(9)Ceres-Solver学习笔记(8)

(10)Ceres-Solver学习笔记(9)

1 练练手

1.1 非约束最优化问题

(1)argminxf(x)=12(10x)2

步骤

​ (1)编写CostFunction结构体。必须重载运算符(),必须使用模板类型,所有输入参数和输出参数都使用模板类型。

​ (2)构造一个求解非线性最小二乘法的Problem来进行未知数求解。

1.2 曲线拟合

(1)魏尔斯特拉斯函数(Weierstrass function)

(2)f(x)=n=0Nancos(bnπx)

​ 其中0<a<1b为正奇数,且满足ab>1+32π

(2)Weierstrass图像绘制
Cerea学习,包含示例代码

(3)步骤

​ (3.1)构造数据。设置参数a=0.3,b=7,n=200

​ (3.2)编写CostFunction结构体。

​ (3.3)构造一个求解非线性最小二乘法的Problem来进行未知数求解。

(4)总结

​ (4.1)利用ceres无法对非线性函数进行曲线拟合,如魏尔斯特拉斯函数。原因包括两点:函数无法进行微分求解和初始点难以选取。

​ (4.2)此处改为ceres对y=eax2+b函数进行曲线拟合,其中 a=0.3,b=0.1 。该函数图如下所示:

Cerea学习,包含示例代码

​ (4.3)可以采用三种方法对问题进行求解,即:在进行Problem构建时,采用AutoDiffCostFunction或NumericDiffCostFunction进行数值微分求解;当无法使用模板来创建costfunctor时,继承SizedCostFunction类来实现Problem。

1.3 单像空间后方交会问题

(1)共线方程

(3){xx0=fa1(XXs)+b1(YYs)+c1(ZZs)a3(XXs)+b3(YYs)+c3(ZZs),yy0=fa2(XXs)+b2(YYs)+c2(ZZs)a3(XXs)+b3(YYs)+c3(ZZs)

​ 其中x0,y0,f已知,abc为旋转矩阵,可以利用ϕ,ω,κ表示如下:

(4){a1=cosϕcosκsinϕsinωsinκ,a2=cosϕsinκsinϕsinωcosκ,a3=sinϕcosω,b1=cosωsinκ,b2=cosωcosκ,b3=sinω,c1=sinϕcosκ+cosϕsinωsinκ,c2=sinϕsinκ+cosϕsinωcosκ,c3=cosϕcosω

(2)步骤

​ (2.1)读入数据,格式为(x,y,X,Y,Z) 。前2维像素坐标—单位mm ,后三维代像坐标—单位m

​ (2.2)编写CostFunction结构体。

​ (2.3)构造一个求解非线性最小二乘法的Problem来进行未知数求解。

(3)运行结果

Cerea学习,包含示例代码

1.4 Powell’s Quartic Function

(1)数学表达式

(5)f(X)=(x1+10x2)2+5(x3x4)2+(x22x3)4+10(x1x4)4

​ 其中:

10xi10,i=1,2,3,4

fmin(X)=0

xi=0

(2)Powell’s Quartic Function分解

(6)f1(x)=x1+10x2f2(x)=5(x3x4)f3(x)=(x22x3)2f4(x)=10(x1x4)2F(x)=[f1(x),f2(x),f3(x),f4(x)]

(3)最优化问题数学描述

(7)argminx12F(x)2

(4)步骤

​ (4.1)编写CostFunction结构体。

​ (4.2)构造一个求解非线性最小二乘法的Problem来进行未知数求解。

(5)运行结果

Cerea学习,包含示例代码

1.5 Bundle Adjustment

(1)BA数据集

Bundle Adjustment in the Large

​ 备注:此处使用Ladybug Dataset:problem-49-7776-pre.txt.bz2

(2)BA问题

ceres solver学习之bundle adjustment

Cerea学习,包含示例代码

(3)步骤

​ (3.1)读取problem-49-7776-pre.txt.bz2数据。

​ (3.2)编写CostFunction结构体。

​ (3.3)构造一个求解非线性最小二乘法的Problem来进行未知数求解。

(4)运行结果

Cerea学习,包含示例代码

相关文章:

  • 2021-09-03
  • 2022-01-30
  • 2022-02-15
  • 2021-12-14
  • 2021-11-29
  • 2021-09-01
  • 2021-07-15
  • 2021-10-03
猜你喜欢
  • 2021-10-02
  • 2022-02-18
  • 2022-12-23
  • 2021-08-19
  • 2021-11-26
  • 2022-12-23
相关资源
相似解决方案