基于图像的三维重建——捆绑调整(6)


前言

Bundle Adjustment译为光束法平差或者束调整、捆绑调整。BA问题主要是对三维点位置和相机参数进行非线性优化,而我们可以把BA问题看成最小化重投影误差问题,同时这也是一个非线性最小二乘问题。


基础知识

重投影

由前面可知,我们可以通过特征点检测与匹配,得到多对特征匹配点,使用对极几何可以求得相机的位姿。由下面公式可得,我们可以通过空间点P的坐标求得空间点P投影在图像中的像素坐标,但是这个像素点坐标是先通过位姿估计,再通过公式计算出来的,相当于这个像素坐标是估算出来的。这个过程称为重投影。
在这里插入图片描述

重投影误差

在这里插入图片描述

如果完全没有误差,那么两者的坐标是一样的,但这是不可能的,不管是实际测量出来的像素坐标还是通过位姿估算+重投影计算出来的像素坐标,都是有误差的,将实际值和估算值一减,就得到了重投影误差。

最小化重投影误差

由于两张图片中有很多特征匹配点,将所有特征点重投影误差求和,取平方,再乘以1/2,这就构建了一个非线性最小二乘问题了,将里面的位姿、空间点作为优化的对象,最小化重投影误差,即得到一个优化后的结果,这就是所谓的BA。
在这里插入图片描述
无约束非线性最小优化问题
在这里插入图片描述
上述问题的最优解通常是指它的局部最优解,对初始值较为敏感,因此需要一个较好的初始值。

求解方法

BA问题被归结为一个非常大的非线性最小二乘问题,通常用Levenberg-Marquardt(LM)算法求解,但在介绍LM算法之前,分别介绍一下最速下降法和牛顿法。

最速下降法

算法介绍

在解决无约束问题时,经常用到的一类算法是最速下降法。
假设g( θ \theta θ)在 θ \theta θt处可微,则它在 θ \theta θt处有Taylor展开式为(略去高阶不计):
在这里插入图片描述
其中 θ \theta θ= θ \theta θt+ δ θ \delta\theta δθ
可以看到,当( ∇ \nabla g( θ \theta θt))T δ θ \delta\theta δθ<0时可保证g( θ \theta θ)的值是在下降。
Δ \Delta Δg=g( θ \theta θ)- θ \theta θt=( ∇ \nabla g( θ \theta θt))T δ θ \delta\theta δθ可见,函数变化量 Δ \Delta Δg为向量 ∇ \nabla g( θ \theta θt)与 δ θ \delta\theta δθ的内积,根据向量内积的计算公式,得 Δ \Delta Δg=|| ∇ \nabla g( θ \theta θt)|| || δ θ \delta\theta δθ|| cos α \alpha α,因为cos α \alpha α ∈ \in [-1,1],当且仅当 δ θ \delta\theta δθ的方向取梯度反方向时,函数值下降最快。当然这只是一个方向,通常我们还需要指定一个步长 λ \lambda λ

算法流程

1)给定初始点 θ \theta θ0,终止控制函数 ϵ \epsilon ϵ>0和步长 λ \lambda λ,令t=0;
2)计算 ∇ \nabla g( θ \theta θt),若|| ∇ \nabla g( θ \theta θt)|| ≤ \le ϵ \epsilon ϵ,停止迭代,输出 θ \theta θt,否则进行下一步;
3)取 θ \theta θt+1= θ \theta θt λ \lambda λ ∇ \nabla g( θ \theta θt),t=t+1,转2)步。

牛顿法

算法介绍

对于非线性优化问题,牛顿法提供了一种求解办法:假设任务是优化一个目标函数f,求函数f的极值,可以转化为求解函数f的导数f’=0的问题。
假设g( θ \theta θ)在 θ \theta θt处二阶可微,且假定二阶导数 ∇ \nabla 2g( θ \theta θ)总是正定的,则它在 θ \theta θt处以g( θ \theta θ)的二阶近似函数Q( θ \theta θ)的极小值点作为下一次迭代点 θ \theta θt+1
在这里插入图片描述
上式对 δ θ \delta\theta δθ求梯度并令其等于0,可以得到:
在这里插入图片描述

算法流程

1)给定初始点 θ \theta θ0,终止控制函数 ϵ \epsilon ϵ>0和步长 λ \lambda λ,令t=0;
2)计算 ∇ \nabla g( θ \theta θt),若|| ∇ \nabla g( θ \theta θt)|| ≤ \le ϵ \epsilon ϵ,停止迭代,输出 θ \theta θt,否则进行下一步;
3)取 θ \theta θt+1= θ \theta θt -( ∇ \nabla 2g( θ \theta θt))-1 ∇ \nabla g( θ \theta θt),t=t+1,转2)步。

Levenberg-Marquardt法

算法介绍

它的原理是一种“信赖阈”的方法,当收敛速度较快时,增大信赖域,使算法趋向于牛顿法;当收敛速度较慢时,减小信赖域,使算法趋向于最速下降法。

为实现
在这里插入图片描述
可得 ∇ \nabla g( θ \theta θt)=-JT( θ \theta θt)(x - f( θ \theta θt)),其中J( θ \theta θt)= ∇ \nabla f( θ \theta θt)。
在这里插入图片描述
将上述公式中的 ∇ \nabla 2g( θ \theta θt)替换成JT( θ \theta θt)J( θ \theta θt) + 1 λ \frac 1\lambda λ1I( λ \lambda λ为信赖域半径),可得增量正规方程
在这里插入图片描述
λ \lambda λ趋向于无穷大时,JT( θ \theta θt)J( θ \theta θt) δ θ \delta\theta δθ=- ∇ \nabla g( θ \theta θt)
λ \lambda λ趋向于零时, δ θ \delta\theta δθ= - ∇ \nabla g( θ \theta θt)

算法流程

1)t=0时,选取初始点 θ \theta θ0,终止控制函数 ϵ \epsilon ϵ,令e0=||x-f( θ \theta θ0)||2, λ \lambda λ=10-3;
2)计算JT( θ \theta θt)
3)构造增量正规方程(JT( θ \theta θt)J( θ \theta θt) + 1 λ \frac 1\lambda λ1I) δ θ \delta\theta δθ=JT( θ \theta θt)(x - f( θ \theta θ))
4)通过求解增量正规方程,得到 δ θ \delta\theta δθ
如果||x - f( θ \theta θ+ δ θ \delta\theta δθ)||<ek,令 θ \theta θt+1= θ \theta θt+ δ \delta δ( θ \theta θ),
  如果|| δ \delta δ( θ \theta θ)||< ϵ \epsilon ϵ,终止迭代;
  否则令 λ \lambda λt+1=10 λ \lambda λt,t=t+1,执行第2)步
否则||x - f( θ \theta θ+ δ θ \delta\theta δθ)||≥ek,令 λ \lambda λt+1=0.1 λ \lambda λt,执行第3)步

增量规方程的求解

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

BAJacobian矩阵推导免费下载。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值