PnP是一类问题的统称,是指通过多对点的3D位置及2D投影坐标,来估计相机位姿R、t。

场景一:视觉slam中在初始化后可以知道空间中一些点在世界坐标系下的坐标,在下一帧图像进行特征点匹配后,利用这些特征点的3D坐标及2D像素坐标,PnP可以计算出当前帧图像的R、t,即在世界坐标系下的R、t。

场景二:输入匹配特征点在上一帧的2D像素坐标、在上一帧相机坐标系下的3D坐标、在当前帧的2D像素坐标,求两帧之间的位姿R、t。

PnP是一大类问题,根据问题不同解法有P3P、DLS、EPnP、UPnP等。

1 P3P

对于场景一问题可以用P3P问题求解,需要三个点即可完成。需要条件:三个点的世界坐标、当前帧下的2D像素坐标。求解思路是首先求解三个点在相机坐标系下的坐标,再通过世界坐标系到像素坐标系的转换公式计算相机在世界坐标系下的R、t。

场景如上图所示,三个空间点ABC、图像投影点abc、相机光心O。计算过程如下:

首先根据余弦定理可得:

等式两边同时除以,并令得到:

得到:

方程中已知量为,未知量为x,y,两个未知量将上述方程化简得到:

求解cos<a,b>:

得到角度为:

同理可以得到:cos<a,c>,cos<b,c>

2 DLS(直接线性变换)

设空间中某点P的世界坐标为,在图像中的2D坐标为,现在求解R、t。

首先定义曾广矩阵,由世界坐标系转像素坐标系有:

消去s得到:

令等式右边为0得到:

每个特征点提供两个方程,求解需要6个点。

SLAM前端:PnP(一)DLS、P3P相关推荐

  1. 视觉SLAM前端——PnP

    如果我们已知多对匹配好的2D/3D特征点,我们可以用PnP方法去求得相机的运动.对于单目相机来说,我们可以通过利用对极约束或者单应性求得相机的运动,然后三角化获得3D点:对于双目可以通过视差恢复深度信 ...

  2. 激光SLAM 前端数据预处理--剔除坏点方法总结

    激光SLAM 前端数据预处理--剔除坏点方法总结 距离处理 去除掉非常近的点 Code 测试 结果分析 去除掉非常近的点 Code 测试 去除NaN的点 Code 反射率处理 Code 测试 结果 去 ...

  3. PnP问题之P3P求解方式

    PnP问题之P3P求解方式 概念 功能 步骤 链接 补充 概念 P3P方法是众多解决PnP问题中的一种方案,是通过已知的3对精准匹配的2D-3D点求解图像间相对的位姿变换的一种方法,所用到的信息较少. ...

  4. 视觉SLAM中PNP求解

    PNP(Perspective-n-points)是SLAM中估计位姿的重要方法.已知条件为路标点在相机1中的相机坐标以及投影到相机2中的像素坐标,据此去估计相机1.相机2间的位姿.主要解法包括DLT ...

  5. SLAM前端知识汇总

    1.常用特征点汇总 1.1 Fast特征点 <SLAM14讲>中LK光流中用的特征点就是Fast特征点,然后对这些特征点进行光流追踪. 在8.3.2节的LK光流代码,第1帧提取的就是Fas ...

  6. SLAM前端中的视觉里程计和回环检测

    1. 通常的惯例是把 VSLAM 分为前端和后端.前端为视觉里程计和回环检测,相当于是对图像数据进行关联:后端是对前端输出的结果进行优化,利用滤波或非线性优化理论,得到最优的位姿估计和全局一致性地图. ...

  7. SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)

    ORB 论文翻译: 一种特征匹配替代方法:对比SIFT或SURF 1.ORB特征简介  ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称 ...

  8. 视觉SLAM前端特征检测与跟踪的思考

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 就目前视觉SLAM的引用来区分,分为基于特征法的和直接法的视觉SL ...

  9. 视觉SLAM前端——ICP

    当我们知道空间点在两个坐标系下的位置时,可以通过ICP来求解其相对位姿.ICP最初常用在激光SLAM中,因为激光可以获得3D位置,而不像视觉还需要经过相机的投影变换,但是从激光雷达获得的三维点云中,我 ...

最新文章

  1. 如何水平居中一个元素
  2. 机器学习(Part I)机器学习的种类
  3. html漂浮在左侧不动,[CSS]CSS练习-悬浮不动侧边栏
  4. 复盘 | 听全民K歌体验设计师聊聊歌房项目完整设计历程
  5. Linux rpm软件管理(安装/卸载/查询)
  6. kettle的基本介绍
  7. MySQL数据库面试题
  8. 临界区,互斥量,信号量,事件的区别
  9. 开源MSSQL Express Profile 文件
  10. python 释放链表节点_四种常见链表的实现及时间复杂度分析(Python3版)
  11. 关于bootstrap--排版(标题、强调、背景、插入符等)
  12. java两个日期相减_java将两个日期相减得到天数
  13. matlab coder 转 c语言,MATLAB Coder从MATLAB生成C/C++代码步骤
  14. 如何快速打开.pos
  15. 如何将多个Execl表格中的数据汇总到一个表中?
  16. 体验部署ThinkAdmin
  17. section怎么制造图框_cad中如何制作带属性块的图框
  18. 第二课等效变化与基尔霍夫定律
  19. Cisco Packet trace的常用命令
  20. 解决PS等软件出现应用程序无法正常启动(0xc000007b)

热门文章

  1. 多层神经网络 —— Sequential模型
  2. 穷人想创业,应该如何找到正确的创业方向?
  3. python开发工程师必刷题型(长期更新)
  4. Groovy的一些坑
  5. 崔卫平:作恶还是反抗?——邪恶体制…
  6. Quartz-2.2.1 任务调度框架在Java项目中的使用实例
  7. 基于Leap Motion设备及Unity3D引擎的自定义手势识别
  8. 华为OD机试真题Java实现【密室逃生游戏】真题+解题思路+代码(20222023)
  9. 【华为OD机试 2023最新 】 密室逃生游戏(C++ 100%)
  10. numpy数组(无冒号,单冒号,双冒号)的含义