当前位置: 首页 > article >正文

PnP(Perspective-n-Point)算法 | 用于求解已知n个3D点及其对应2D投影点的相机位姿

什么是PnP算法?

  • PnP 全称是 Perspective-n-Point,中文叫“n点透视问题”。
  • 它的目标是:
    已知一些空间中已知3D点的位置(世界坐标)和它们对应的2D图像像素坐标,求解摄像机的姿态(位置和平移)和朝向(旋转)。

简单来说,就是通过3D点和它们在照片上的投影点,算出相机“站在哪儿”和“看向哪儿”。

PnP解决的问题

你有一堆现实世界的点(比如3D模型上的标志点),也知道这些点在照片里的像素位置,PnP就是帮你找出“相机相对于这些点的位置和角度”。

PnP算法的原理(简单版)

  1. 已知条件:

    • n n n 个已知3D点 P i = ( X i , Y i , Z i ) P_i = (X_i, Y_i, Z_i) Pi=(Xi,Yi,Zi),在世界坐标系里。
    • 它们对应的2D像素点 p i = ( u i , v i ) p_i = (u_i, v_i) pi=(ui,vi),在图像中。
  2. 目标:

    • 找到相机的旋转矩阵 R R R 和平移向量 t t t,使得所有3D点经过变换后投影到图像上的位置,尽可能接近对应的2D点。
  3. 数学关系:

    s [ u i v i 1 ] = K × ( R × P i + t ) s \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = K \times \big( R \times P_i + t \big) s uivi1 =K×(R×Pi+t)

    其中:

    • K K K 是相机内参矩阵,已知。
    • R , t R, t R,t 是未知(我们要解的)。
    • s s s 是尺度因子(用于齐次坐标)。
  4. 求解过程:

    • 利用多组点的对应关系,建立方程组。
    • 通过最小化投影误差(图像点和投影点的距离),用优化算法求出最佳的 R R R t t t

你可以这样理解:

  • PnP就像“反向投影”:你知道点在现实和照片的位置,求相机的位置和朝向。

额外说明:

  • 如果点的数量较少(最少4个点),算法能工作,但更多点通常能得到更稳定准确的结果。
  • 经典的PnP算法有很多变体,比如EPnP、UPnP、RPnP等,都旨在更快或更鲁棒地求解。

在这里插入图片描述


值得注意的是PnP的前提:对应关系必须先确定

  • **PnP算法本身不负责找到哪些3D点对应哪些2D点,**它的输入是:

    • 一组3D点(已知位置)
    • 它们在图像中的对应2D点
  • 所以,在用PnP之前,必须先解决“匹配”问题:
    怎样找到图像中哪个像素点对应哪个3D世界点?

对应关系的获得途径举例:

  1. 人工标定/标记:
    在物体或场景上贴标记点,知道标记点的3D坐标,手动或者半自动找到图像中的对应点。

  2. 特征匹配:
    利用特征点检测(如SIFT、ORB)在图像中提取关键点,并用描述子匹配它们与3D点(如用激光扫描得到的点云中提取特征点)。

  3. 结构光或投影仪:
    通过主动投影图案产生已知对应关系。

  4. 深度相机(RGB-D)或激光雷达数据:
    直接获得3D点和2D图像对齐。

没有对应关系,PnP算法就无从下手

所以在做定位、姿态估计、SLAM等任务时,建立稳定准确的“3D点 ↔ 2D点”对应关系是关键的第一步。

http://www.lryc.cn/news/2396499.html

相关文章:

  • LeetCode 热题 100 208. 实现 Trie (前缀树)
  • python爬虫:RoboBrowser 的详细使用
  • 在日常管理服务器中如何防止SQL注入与XSS攻击?
  • Wkhtmltopdf使用
  • ArcGIS Pro 创建渔网格网过大,只有几个格网的解决方案
  • 重学计算机网络之以太网
  • 《深度解构现代云原生微服务架构的七大支柱》
  • 使用SCSS实现随机大小的方块在页面滚动
  • AI 眼镜新纪元:贴片式TF卡与 SOC 芯片的黄金组合破局智能穿戴
  • 论文阅读(六)Open Set Video HOI detection from Action-centric Chain-of-Look Prompting
  • 算法学习--持续更新
  • Postman 发送 SOAP 请求步骤 归档
  • Python Day39 学习(复习日志Day4)
  • [Python] Python自动化:PyAutoGUI的基本操作
  • 课程介绍:《ReactNative基础与实战指南2025》
  • “候选对话链”(Candidate Dialogue Chain)概念
  • 应急响应靶机-web2-知攻善防实验室
  • comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 1
  • UV 包管理工具:替代 pip 的现代化解决方案
  • css3 新增属性/滤镜效果/裁剪元素/图片适应盒子/定义和使用变量/恢复默认initial
  • YOLOv8 实战指南:如何实现视频区域内的目标统计与计数
  • matlab实现VMD去噪、SVD去噪,源代码详解
  • SQLite软件架构与实现源代码浅析
  • JAVA实战开源项目:精简博客系统 (Vue+SpringBoot) 附源码
  • Flink SQL 编程详解:从入门到实战难题与解决方案
  • GO+RabbitMQ+Gin+Gorm+docker 部署 demo
  • 通过openpyxl在excel中插入散点图
  • 基于cornerstone3D的dicom影像浏览器 第二十五章 自定义VR调窗工具
  • 针对 Harmony-Cordova 性能优化,涵盖原生插件开发、线程管理和资源加载等关键场景
  • 【SCI论文实现】信息引导的高质量三维重建——系统架构设计 PYTHON