新闻详情
PnP:从二维图像“还原”三维姿态的几何之眼
PnP:从二维图像“还原”三维姿态的几何之眼
引言想象你有一张照片照片里有一个你认识的物体——比如一个魔方。你不仅能认出它还能从照片中“感觉”到它相对于相机是如何摆放的是正对着你还是侧着身子是近在咫尺还是远在天边这种从二维图像中推断三维空间中物体姿态的能力对人类来说几乎是本能的但对计算机来说却是一道难题。PnPPerspective-n-Point透视n点问题正是解决这个难题的经典方法。它的任务很简单给定一组三维空间中的点比如物体上已知的标记点和它们在二维图像上的投影位置以及相机的内部参数求解相机相对于这些三维点的位置和朝向即姿态。PnP 问题最早由 Fischler 于 1980 年代提出至今仍是计算机视觉中最基础、最重要的几何问题之一。如果把相机比作一只“眼睛”那么 PnP 就是“让这只眼睛不仅看见世界还能测量世界”——它从二维的投影中反向推演出三维的位姿让机器拥有了空间感知的能力。前置知识相机模型针孔相机模型三维空间中的点通过透视投影映射到二维图像平面上。数学上这个映射可以表示为 uK[R∣t]XuK[R∣t]X其中 XX 是世界坐标系下的三维点uu 是图像上的二维点KK 是相机内参矩阵RR 和 tt 是相机外参旋转矩阵和平移向量。相机内参Intrinsic Parameters包括焦距、主点光心在图像上的位置、像素纵横比等描述了相机本身的成像特性。如果内参已知称为已标定相机如果未知则需要额外估计。相机外参Extrinsic Parameters即旋转矩阵 RR 和平移向量 tt描述相机在世界坐标系中的位置和朝向。刚体变换物体在空间中运动时保持形状不变其运动可以分解为旋转和平移共有6个自由度3个旋转 3个平移。点对应关系Point Correspondences已知某个三维点 XiXi 在图像上对应的二维投影点 uiui称为一组 3D-2D 对应关系。核心思想PnP 问题的本质是一个逆向工程问题已知投影的结果2D点和投影的对象3D点反推投影者相机的位置和朝向。数学上可以这样描述给定 nn 个三维点 {X1,X2,...,Xn}{X1,X2,...,Xn}世界坐标系下的坐标以及它们对应的 nn 个二维投影点 {u1,u2,...,un}{u1,u2,...,un}图像坐标系下的坐标在已知相机内参矩阵 KK 的条件下求解相机外参 RR 和 tt使得uiK[R∣t]XiuiK[R∣t]Xi对所有 i1,2,...,ni1,2,...,n 尽可能成立。如果把三维点比作“星星”二维投影比作“星星在地上的影子”那么 PnP 就是“根据影子的位置反推出光源在哪里”——这是一个典型的透视几何逆问题。PnP 的求解方法PnP 的求解方法大致可分为两大类线性/闭式解法直接给出解析解和非线性优化解法迭代求解使误差最小。以下是几种最主流的方法。1. 直接线性变换DLTDirect Linear TransformDLT 是最直观的解法。它将透视投影方程展开为线性方程组然后直接求解。思路每组 3D-2D 对应点可以提供 2 个线性方程。未知数是旋转矩阵 RR 的 9 个元素和平移向量 tt 的 3 个元素共 12 个未知数。因此至少需要6 组对应点才能求解。将所有的方程拼成一个大的矩阵方程 Af0Af0通过奇异值分解SVD即可求解。特点优点原理简单计算速度快。缺点只考虑了线性意义下的最优解没有利用旋转矩阵的正交约束RTRIRTRIdet(R)1det(R)1因此求出的 RR 可能不满足约束需要额外用 QR 分解等方法进行近似修正。精度相对较低。2. P3PPerspective-Three-PointP3P 是最小配置解法——仅用3 个点就能求解相机姿态。3 个点构成三角形利用三角形的几何约束相似三角形建立方程组将问题转化为求解一个四次方程。解的个数P3P 问题最多有4 个解需要额外的点第4个点来从多个解中选出正确的一个。特点优点所需点数最少适合特征点稀疏的场景。缺点存在多解问题且某些几何配置下可能无解缺解问题对噪声敏感。3. EPnPEfficient PnPEPnP 是目前最流行的 PnP 解法之一由 Lepetit 等人提出。它的核心思想非常巧妙不直接求解 n 个三维点在相机坐标系下的坐标而是引入 4 个虚拟的控制点将 n 个三维点表示为这 4 个控制点的加权和。思路在世界坐标系中选择 4 个控制点通常选择点集的中心和 PCA 主方向上的点以提高数值稳定性。将每个三维点表示为这 4 个控制点的加权和权重在变换前后保持不变。通过 2D 投影点求解这 4 个控制点在相机坐标系下的坐标。一旦得到控制点的相机坐标整个点集的相机坐标也就确定了进而可以解出 RR 和 tt。特点优点复杂度为 O(n)O(n)线性增长适用于 n≥4n≥4 的所有情况包括平面和非平面点集精度高速度快。由于只针对 4 个控制点进行优化计算效率远高于其他方法。4. UPnPUnified PnPUPnP 是 EPnP 的扩展和统一。它不仅能求解相机姿态还能同时估计相机的焦距即内参中的未知部分。特点优点适用于未标定相机的场景Uncalibrated PnP能处理最小配置情况如 3 个点对线的对应具有普适性和竞争性的抗噪声能力。5. 非线性优化 / 光束平差法BABundle Adjustment以上所有方法给出的都是闭式解或线性解它们通常作为初值供后续的非线性优化进一步提高精度。思路定义一个重投影误差——将估计出的 RR 和 tt 把三维点重新投影到图像上计算投影点与实际观测点之间的距离。然后最小化所有点的重投影误差的平方和minR,t∑i1n∥ui−K[R∣t]Xi∥2R,tmini1∑n∥ui−K[R∣t]Xi∥2这是一个非线性最小二乘问题通常用Levenberg-Marquardt 算法L-M 算法迭代求解。特点优点精度最高是 SLAM 后端优化的核心算法。缺点需要好的初值否则可能陷入局部最优计算量大。算法对比与选择方法最少点数复杂度精度适用场景DLT6O(n)O(n)较低快速粗略估计需后续优化P3P3O(1)O(1)中等点数极少需额外点消歧EPnP4O(n)O(n)高通用场景最常用UPnP4O(n)O(n)高内参未知或部分未知BA非线性优化任意迭代最高要求高精度已有初值在实际应用中典型的策略是先用 EPnP 或 DLT 求一个初始解再用 BA 进行精细优化。OpenCV 的solvePnP函数默认采用的就是迭代法ITERATIVE它先用 DLT 求初解非平面点需至少 6 点平面点需至少 4 点再用 L-M 算法最小化重投影误差。性质与关键理解性质说明最小点数PnP 问题理论上最少需要 3 个点P3P但会产生多个解4 个点不共面通常可以得到唯一解6 个点可以线性求解平面 vs 非平面当所有三维点共面时问题会退化需要至少 4 个点才能求解多解性P3P 最多有 4 个解当 n5n5 时最多可能有 2 个解标定要求标准 PnP 假设相机已标定内参已知UPnP 可以在未知内参的情况下求解噪声敏感性PnP 对 2D 点坐标的噪声敏感尤其是深度方向即相机到物体的距离的估计误差较大应用领域PnP 是计算机视觉中应用最广泛的几何算法之一增强现实AR与虚拟现实VR在真实场景中叠加虚拟物体需要精确知道相机相对于标记物的姿态。视觉 SLAM即时定位与地图构建通过 3D-2D 匹配估计相机运动是 SLAM 前端里程计的核心模块。机器人定位与导航机器人通过识别环境中的已知标记点利用 PnP 确定自身位置。6D 物体姿态估计在工业分拣、自动驾驶中估计物体相对于相器的六自由度位姿。三维重建与运动恢复结构SFM从多张图像中重建三维场景。无人机降落引导通过识别地面靶标利用 PnP 估计无人机相对于降落平台的位姿。拓展P n P LPerspective-n-Point-and-Line同时使用点和线的对应关系进行位姿估计在点特征不足时更加鲁棒。RPnP一种鲁棒的 O(n)O(n) PnP 解法通过建立新的正交坐标系来减少未知数。深度学习的 PnP近年来出现了将深度学习与 PnP 结合的方法如 EPro-PnP试图让 PnP 过程可微分从而融入端到端的训练框架。Blind PnP在 2D-3D 对应关系未知的情况下同时求解对应关系和相机姿态。总结PnP 是连接二维图像与三维世界的桥梁。它从一个看似简单的问题——已知三维点在哪里、二维投影在哪里反推相机在哪里——出发衍生出了一系列精妙的算法从朴素的 DLT到最小配置的 P3P再到高效通用的 EPnP以及追求极致精度的非线性优化。如果说相机是机器的“眼睛”那么 PnP 就是让这双眼睛拥有空间感知能力的“大脑”。无论是让手机在桌面上“看见”一只虚拟恐龙AR还是让机器人在未知环境中“记住”自己走过的路SLAMPnP 都在幕后默默地计算着那 6 个自由度的姿态参数。“PnP 告诉我们从二维的投影中还原三维的姿态就像从影子推断光源的位置——看似不可能但几何的法则让一切有迹可循。”