《视觉SLAM十四讲精品总结》7:VO—— 3D-2D:PnP+BA

本文详细介绍了视觉里程计中PnP(Perspective-n-Point)问题的解决方法,包括直接线性变换(DLT)、P3P算法及其代码实现,并探讨了BA(Bundle Adjustment)在SLAM中的应用,解释了BA优化3D坐标和相机位姿的过程,以及在g2o库中的实现细节。
摘要由CSDN通过智能技术生成

引出

2D-2D的对极几何需要8个以上点对,且存在初始化、纯旋转和尺度问题。

特征点3D位置可以由三角化或RGB-D相机深度图确定。

因此,双目或RGB-D相机直接使用PnP估计相机运动。单目视觉里程计,首先初始化,然后才能PnP。

PnP为( Perspective-n-Point)的简称,即给出n个3D空间点及其投影位置时,如何求解相机的位姿R t

PnP优点:不需要对极约束,3个的匹配点对就可以运动估计。

内容

直接线性变换(DLT)

P3P及实现

BA(Bundle Adjustment)及实现

一、DLT

  • 每个特征点对提供两个关于t的线性约束,t 一共12维,至少需要6个特征点对实现T的线性求解。
  • 匹配点数大于6,SVD最小二乘解。
  • 缺点:T矩阵看成12个未知数,忽略了他们之间的联系。

二、P3P

1、原理:利用了三角形相似,求解投影点abc在相机坐标系下的3D坐标,然后将问题转为3D-3D问题。

在SLAM实用:先P3P估计相机位姿R t, 之后构建最小二乘优化问题对估计值进行调整。

2、代码实现

调用solvePnP函数

bool cv::solvePnP(objectPoints,imagePoints,cameraMatrix,distCoeffs,
OutputArray r, OutputArray t,
bool useExtrinsicGuess = false,int flags = SOLVEPNP_ITERATIVE )	
objectPoints Array of object points in the 世界坐标系, Nx3 1-channel or 1xN/Nx1 3-channel, where N is the number of points. vector<Point3f>  pts_3d
imagePoints Array of corresponding 第二张图的像素坐标, Nx2 1-channel or 1xN/Nx1 2-channel, where N is the number of points. vector<Point2f> pts_2d
cameraMatrix Input camera matrix
distCoeffs Input vector of distortion coefficients (k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,τx,τy]]]]) of 4, 5, 8, 12 or 14 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.
rvec Output 旋转向量 (see Rodrigues ) that, together with tvec , brings points from the model coordinate system to the camera coordinate system.需要罗德里格斯公式化为旋转矩阵
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值