第242篇 视觉SLAM前端之PnP问题——从2D到3D的位姿估计
上一篇讲了对极几何解决的是两幅图像之间怎么恢复相机运动的问题。这篇讲一个更实用的场景已知一组3D点和它们在图像上的2D投影怎么估计相机的位姿这个问题在实际工程中出现的频率比对极几何高得多。这就是PnPPerspective-n-Point问题。在视觉SLAM的跟踪阶段PnP是用得最多的位姿估计方法。因为SLAM运行一段时间之后地图里已经有了一批3D路标点。来了新帧之后只需要找到这些路标点在新帧上的投影就能用PnP算出当前帧的位姿。整个过程只需要一帧图像的信息不需要和前一帧做对比这就是PnP的优势。面试的时候PnP是必考内容各种解法的原理和区别都要搞清楚。PnP问题的定义给定n个3D空间点及其在图像上的2D投影点求解相机的位姿旋转R和平移t。3D点P₁, P₂, ..., Pₙ世界坐标系下 2D点p₁, p₂, ..., pₙ像素坐标 投影关系p K[R|t]PK是相机内参要求的就是R和t。这是一个经典的几何问题有多种解法。注意这里的n可以是任意大于等于3的数不同的n对应不同的解法。n越大约束越多理论上精度越高但计算量也越大。实际中n通常在10-100之间。PnP的几种解法DLT直接线性变换最朴素的解法。把投影方程展开每个3D-2D对应提供两个线性方程。至少需要6对点因为R有约束DLT先不考虑旋转矩阵的正交性。解出来之后再做SVD分解恢复正交旋转矩阵。实现简单但精度不高通常只作为其他方法的初始化。P3P只需要3对点就能求解。原理是利用3个3D点和相机光心构成的四面体的边长关系列出一个多项式方程最多有4组解。然后用额外的点来验证哪组解是对的。P3P计算很快适合做RANSAC的内层求解器。P3P的直觉是这样的假设你知道三个3D点A、B、C的位置也看到它们在图像上的投影a、b、c。从投影关系你能算出光心O到A、B、C三条射线之间的夹角用内参和像素坐标就能算。然后在三角形OAB中AB已知角AOB已知用余弦定理就能列出OA和OB的关系。三个三角形给出三个方程解出OA、OB、OC的长度位姿就恢复了。EPnP2009年提出的高效解法。把n个3D点用4个虚拟控制点来表示把问题从求解n个点的位姿简化为求解4个控制点的坐标。复杂度O(n)精度也不错。OpenCV里的EPnP实现是常用的选择。EPnP的核心优势是计算速度快几百个点的PnP也能在1毫秒内完成。# OpenCV中求解PnP retval, rvec, tvec cv2.solvePnP( objectPoints, # N×1×3 的3D点 imagePoints, # N×1×2 的2D点 cameraMatrix, # 相机内参K distCoeffs, # 畸变系数 flagscv2.SOLVEPNP_EPNP # 用EPnP方法 ) # rvec: 旋转向量轴角表示tvec: 平移向量迭代法非线性优化以上方法都是线性或近似的。迭代法直接把PnP建模为非线性最小二乘问题用Gauss-Newton或Levenberg-Marquardt迭代求解。精度通常最高但需要好的初始值。实际中通常先用线性方法如EPnP给出初始值再用迭代法精化。在SLAM中PnP怎么用视觉SLAM的跟踪阶段PnP是这样工作的第一步当前帧提取特征点。 第二步和地图中已有的3D路标点做匹配通过描述子匹配或者特征追踪。 第三步有了3D-2D对应关系用PnP求解当前帧的位姿。 第四步用RANSAC剔除误匹配得到可靠的位姿估计。ORB-SLAM2的跟踪线程就是这么做的。它的地图里存着大量ORB特征点及其3D坐标新帧来了之后通过描述子匹配找到对应的3D-2D关系然后用P3PRANSAC求解位姿最后用迭代法精化。整个过程通常在十几毫秒内就能完成满足实时要求。VINS-Mono的位姿估计稍有不同。它不是直接用PnP而是用滑动窗口内的IMU预积分结果作为先验然后用视觉观测来修正。但本质上也是在解一个3D-2D的位姿估计问题只是多了IMU的约束。面试中的高频追问P3P为什么只需要3个点 3个3D点和相机光心构成一个四面体。3个3D点之间的距离已知从地图中得到3个3D点到光心的距离未知但有约束通过投影关系和余弦定理。三个余弦定理方程可以解出三个距离进而恢复位姿。方程最多有4组正实数解用第4个点来消歧。PnP的精度受什么影响 三个因素3D点的精度地图质量、2D点的精度特征提取和匹配的精度、点的分布点越分散位姿估计越稳定。如果所有3D点都集中在一个很小的区域位姿估计的误差会很大。为什么SLAM跟踪阶段用PnP而不用对极几何 对极几何只需要2D-2D匹配恢复的是相对运动两帧之间的R和t。PnP用的是3D-2D匹配直接恢复绝对位姿相对于世界坐标系的R和t。SLAM跟踪阶段地图已经建好了有3D信息可用用PnP更直接、更准确。solvePnP和solvePnPRansac有什么区别 solvePnPRansac内部集成了RANSAC能自动剔除误匹配。solvePnP假设所有输入都是正确的匹配。实际中几乎总是用solvePnPRansac因为匹配中难免有错误。PnP和ICP有什么区别 PnP是3D-2D的配准3D点投影到2D图像ICP是3D-3D的配准两组3D点云对齐。PnP用在视觉SLAM里ICP用在激光SLAM里。两者的数学形式不同但目标一样找到最优的旋转和平移。旋转向量rvec是什么 旋转向量是旋转的轴角表示。向量的方向是旋转轴长度是旋转角度。用Rodrigues公式可以转换成3×3的旋转矩阵。旋转向量只有3个参数比旋转矩阵的9个参数更紧凑优化起来更方便。PnP和其他位姿估计方法的对比SLAM里估计位姿有几种方法适用场景不同2D-2D对极几何两帧之间没有3D信息时使用恢复的是相对运动。用于SLAM的初始化阶段。3D-3DICP两组3D点云之间的配准。用于激光SLAM或者RGB-D相机的位姿估计。3D-2DPnP已知3D点求相机位姿。用于视觉SLAM的跟踪阶段是最常用的方法。直接法不用特征点直接用像素灰度的光度误差来估计位姿。计算快但要求光照稳定。这四种方法覆盖了SLAM中所有可能的位姿估计场景。理解它们的区别和联系面试的时候就能对答如流展现出你对SLAM前端的全面理解。工程实践中的经验PnP在实际使用中要注意几点。输入点不能太少至少需要6-8对匹配才能给出稳定的结果。如果匹配点太少比如只有3-4对位姿估计会很不稳定。这时候应该降低特征提取的阈值或者扩大匹配搜索范围。3D-2D匹配的质量很关键。如果匹配了很多错误的3D点比如把A路标点匹配到了B路标点的投影上PnP的结果就会跑偏。所以匹配阶段要严格验证宁缺勿滥。RANSAC的参数要根据场景调。内点阈值reprojection error阈值通常设为1-3个像素。迭代次数根据预期的外点比例来定一般设为100-200次。还有一个容易忽略的点畸变校正。如果相机有明显的畸变比如鱼眼镜头在做PnP之前必须先把2D点校正到无畸变的坐标。否则投影模型不匹配PnP的结果会有系统性的偏差。OpenCV的undistortPoints函数可以做这个校正。最后一个建议PnP的结果最好做一次BA精化。PnP给出的位姿只是初步估计用BABundle Adjustment对所有变量位姿路标点做一次联合优化精度会更高。ORB-SLAM的局部BA就是在做这件事。PnP是视觉SLAM跟踪阶段的核心算法也是面试中最高频的考点之一。从P3P到EPnP从线性解法到非线性优化每种方法的原理和适用场景你都要心里有数。上一篇第241篇 视觉SLAM前端之对极几何——本质矩阵和基础矩阵下一篇我们聊直接法——不用特征点直接用像素灰度来做位姿估计的另一条路。直接法和特征点法是视觉SLAM的两大流派各有优劣面试的时候经常被拿来对比。如果这篇文章对你有帮助欢迎点赞支持一下你的鼓励是我持续更新的动力

相关新闻

从FFmpeg到Pillow:构建高效自动化文件格式转换技术栈

从FFmpeg到Pillow:构建高效自动化文件格式转换技术栈

你是不是也遇到过这样的场景:好不容易找到一段珍贵的音频素材,结果发现是WAV、FLAC甚至M4A格式,上传到某些平台直接被拒;或者收到一堆五花八门的图片,JPG、PNG、WebP、BMP都有,需要统一成PDF提交给客户&…

2026/8/23 9:34:54 阅读更多 →
AI面试技能:从工具使用到职场竞争力的全面解析

AI面试技能:从工具使用到职场竞争力的全面解析

1. 为什么AI能力成为面试硬通货 最近帮朋友公司面试了几个应届生,发现一个残酷的现实:不会用AI工具的候选人,基本在第一轮就被筛掉了。这不是个别现象,去年秋招时某大厂HR透露,所有通过初筛的简历都经过了AI工具使用测…

2026/8/23 9:34:54 阅读更多 →
游戏安全架构实战:从原理到代码,构建高可用二级密码系统

游戏安全架构实战:从原理到代码,构建高可用二级密码系统

最近在游戏安全圈里,一个话题被反复提及:“二级密码”。起因是《三角洲行动》S10赛季更新中,一个名为“电子脚拷”的装备引发了玩家热议,其核心机制就是强制对手在“猛攻”前必须输入二级密码。一时间,“传奇二级密码在…

2026/8/23 9:34:54 阅读更多 →

最新新闻

十分钟搞懂 macFUSE:macOS 免内核代码自建文件系统的免费保姆级攻略

十分钟搞懂 macFUSE:macOS 免内核代码自建文件系统的免费保姆级攻略

十分钟搞懂 macFUSE:macOS 免内核代码自建文件系统的免费保姆级攻略 【免费下载链接】osxfuse macFUSE umbrella repository 项目地址: https://gitcode.com/gh_mirrors/os/osxfuse macFUSE 是 macOS 上的一套用户态文件系统框架:文件系统代码跑在…

2026/8/23 10:57:26 阅读更多 →
UI-TARS 桌面应用:用自然语言指挥电脑,从零部署到跑通第一个任务

UI-TARS 桌面应用:用自然语言指挥电脑,从零部署到跑通第一个任务

UI-TARS 桌面应用:用自然语言指挥电脑,从零部署到跑通第一个任务 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/…

2026/8/23 10:57:26 阅读更多 →
多模态智能体在开放3D世界中的端到端任务执行与评测实践

多模态智能体在开放3D世界中的端到端任务执行与评测实践

1. 先搞清楚这个“多模态智能体”到底解决了什么实际问题 如果你看到“多模态智能体”、“开放3D世界”这些词,第一反应可能是“又一个炫酷的AI概念”。但这次不一样,它解决的是一个非常具体且棘手的工程问题: 如何让一个AI智能体&#xff0…

2026/8/23 10:57:26 阅读更多 →
CSP-J/S经典真题解析:队列优化公交换乘模拟算法

CSP-J/S经典真题解析:队列优化公交换乘模拟算法

1. 项目概述:从一道经典真题看算法竞赛中的模拟与优化如果你正在准备CSP-J/S(信息学奥赛入门级/提高级)或者类似的算法竞赛,那么“公交换乘”这道题绝对是一个绕不开的经典。它源自2019年CSP-J(原NOIP普及组&#xff0…

2026/8/23 10:57:26 阅读更多 →
大语言模型面试题库:从理论到实践的50个关键问题

大语言模型面试题库:从理论到实践的50个关键问题

1. 项目背景与核心价值 最近在帮团队面试AI方向候选人时,发现很多同学对大语言模型的理解还停留在表面调用API的阶段。这促使我系统整理了这份覆盖LLM全知识栈的面试题库,包含从基础理论到生产实践的50个关键问题。不同于网上零散的面试题集合&#xff0…

2026/8/23 10:57:26 阅读更多 →
Chat2DB 完整指南:一座「数据库控制塔」,快速连接 40+ 数据库,让 AI 帮你写 SQL

Chat2DB 完整指南:一座「数据库控制塔」,快速连接 40+ 数据库,让 AI 帮你写 SQL

Chat2DB 完整指南:一座「数据库控制塔」,快速连接 40 数据库,让 AI 帮你写 SQL 【免费下载链接】Chat2DB Chat2DB is a free, cross-platform, local-first database client and SQL workspace for developers, DBAs, analysts, and data tea…

2026/8/23 10:56:26 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →