单目视觉(7):SFM之Bundle Adjustment (六)

光束平差法:Bundle Adjustment


引入

Bundle Adjustment (BA)的翻译可以看出其利用的一组数据(“光束”)来进行最小化误差(“平差”),其本质就是一种优化算法。在SFM中,我们采用了多个视角的不同图像来计算物理世界的实际位置(三角定位)。那么三角定位得到的物体的三维位置信息肯能是不准确的。我们按照这个信息再次重新在像平面上进行投影(重投影),得到的新的投影位置。该位置与第一次投影(相机成像时为第一次投影)可能存在误差。BA模型最小化的误差就是这个重投影误差。

模型

假设物理世界的物体的坐标为 C(x,y,z) C ( x , y , z ) ,其在像平面上的成像的坐标为 (u,v) ( u , v ) 。那么在SFM中,如果世界坐标系固定,也就是物体的世界坐标不发生变化。而相机在不同角度进行对物体进行拍摄成像,那么在不同位置 Pi P i 中像素位置是不一样的 (uij,vij) ( u i j , v i j )
根据之前的博文中推导过程可以得知,物体的世界坐标和像素坐标之间是存在一个关系的。即:

uijvij1=Pixjyjzj1 [ u i j v i j 1 ] = P i [ x j y j z j 1 ]

在重投影之后,我们还可以获得一个物理世界坐标(经过计算得出的世界坐标,并不一定为真实坐标)和像素坐标(并不一定为真实的像素坐标)。即:
uijvij1=MiPixjyjzj1 [ u i j ′ v i j ′ 1 ] = M i P i [ x j ′ y j ′ z j ′ 1 ]

那么由此,就可以得到两次投影的误差了:
ei=||(uij,vij)(uij,vij)|| e i = | | ( u i j ′ , v i j ′ ) − ( u i j , v i j ) | |

从而可以得到优化的目标函数:
minRi,ti,Cji,jσijeij min R i , t i , C j ∑ i , j σ i j e i j

其中, σij σ i j 表示 Cj C j 是否在 Pi P i 位置的像上是否有投影。

优化方法

当将问题转化为无约束的优化模型后,只需要根据实际的需求选择不同的优化方法来优化目标函数,常用的方法有梯度下降法、最速下降法、牛顿法、拟牛顿法、LM算法等。部分相关算法可以参考:无约束优化


Reference

[1] Bundle Adjustment简述
[2] 单目视觉(4):SFM之相机模型(二)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SFM(Structure from Motion)是一种基于图像的三维重建技术,通过对一系列图像进行处理,可以恢复出场景的三维结构,并估计出相机的位姿。bundle_adj2是SFM中的一个步骤,用于优化相机的位姿和三维点的位置,以减小重建误差。 bundle_adj2是一个Python库,用于实现bundle adjustment算法bundle adjustment是一种在三维重建过程中优化相机位姿和三维点坐标的方法。该算法基于最小二乘法,通过最小化重建误差,使得重建结果更加精确。 在使用bundle_adj2库时,我们需要提供输入数据,包括一系列观察到的特征点、对应的图像位置、相机的初始位姿等信息。然后,通过bundle adjustment算法,该库可以自动优化相机位姿和三维点的位置,得到更准确的重建结果。 使用bundle_adj2的过程包括以下几个步骤: 1. 准备输入数据:收集一些图像和对应的特征点信息,并估计初始的相机位姿。 2. 定义优化对象:创建bundle_adj2的优化对象,并设置相关参数。 3. 添加观察数据:将图像位置和特征点添加到优化对象中。 4. 进行优化:调用优化对象的优化方法,进行相机位姿和三维点的优化。 5. 获取优化结果:获取优化后的相机位姿和三维点位置,得到更准确的重建结果。 总的来说,bundle_adj2是一个用于实现bundle adjustment算法的Python库,可以用于优化SFM中相机的位姿和三维点的位置,以提高三维重建的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值