3D-2D三维重建:PnP

PnP(Perspective-n-Point)算法是三维重建中的关键步骤,用于估计相机位姿。本文介绍了PnP问题的背景,包括直接线性变换法、P3P方法以及BA优化。P3P仅需3对3D-2D点对,通过迭代最近点(ICP)迭代求解。非线性优化方法如BA则同时优化相机位姿和空间点坐标。代码示例展示了使用OpenCV的EPNP方法解决PnP问题。
简介

PnP(Perspective-n-Point)描述了当我们已知n个世界坐标系下的3D空间点以及它们的2D归一化相机坐标系下的坐标时,如何估计相机位姿的方法。通常最少需要4对3D-2D点对(其中之一用于验证结果),就可以解出PnP问题。尤其是在双目或RGB-D的视觉里程计中,点的空间坐标可以由 s K − 1 x sK^{-1}x sK1x直接求出, s s s为像素点的深度值,即可直接使用PnP估计相机运动。

PnP问题解法有很多,线性方法有直接线性变换法、P3P、EPnP、UPnP等,还可以采用非线性优化的方法、构建最小二乘问题迭代求解,最常用的是BA调整(Bundle Adjustment)。OpenCV中对上述多数方法都进行了集成,详情可见:solvePnP()

PnP只是求解相机位姿的方法,求解出来的位姿均是相机相对世界坐标系的变换关系 T w c T_{wc} Twc。对于那些没有3D匹配点的2D-2D匹配点对,估计其对应的3D点仍需采用三角化方式。

原理
直接线性变换法

直接线性变换法依据相机投影的基本原理,通过线性变换求解目标值。即 s x = P X sx=PX sx=PX其中, x = ( u , v , 1 ) T x=(u,v,1)^T x=(u,v,1)T为像素点的归一化坐标; P = [ R ∣ T ] P=[R|T] P=[RT] 3 × 4 3\times4 3×4的相机投影矩阵。
在求解PnP问题时,旋转矩阵 R R R和平移矩阵 T T T是待求的变量,由于 P P P一共有12维,而每对点对能提供2个约束,因此最少需要6对点对,才能实现PnP问题的线性求解。

需要注意的一点是,上述公式默认相机内参数矩阵 K K K已知,所以 x x x采用的是归一化平面坐标,在求解PnP问题时去掉了 K K K的影响,对应的solvePnP()中的3D点为相机坐标系下的齐次坐标;如果 K K

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值