PNP的学习-P3P
PNP方法是为了解决在当前两帧图像中,已知前一帧图像上的3dLandmark点和当前帧的2d特征点,求取当前帧的pose。
PNP主要有P3P、EPNP、UPNP、DLT、MRE(LS Iteration,g2o).
一、p3p
p3p主要是根据针孔模型原理,即3d点投影到相机归一化坐标系再汇集到光心,如下图所示:
因此根据上右图中的模型,A,B,C为3D点,已知a'=|BC|,b'=|AC|,c'=|AB|,α=<PB,PC>,β=<PA,PB>,γ=<PA,PC>,其中角度可由归一化平面内对应的点求出。令a'2=ac'2,b'2=bc'2.
再令未知数X=PA,YPB,Z=PC,X=xZ,Y=yZ,c'2=vZ2,p=2cosα,q=2cosβ,r=2cosγ,则a'2=ac'2=avZ2,b'2=bc'2=bvZ2.
然后根据三角形的余弦定理,分别在三个三角形中列方程:
Y2+Z2-2YZcosα=a'2
X2+Z2-2XZcosβ=b'2
Y2+X2-2YXcosγ=c'2
同时有一个约束方程:P,A,B,C不共面:p2+q2+r2-pqr-1≠0;必须满足这个约束条件
再将三个方程替换成以下形式:
(1-a)y2-ax2+axyr-yp+1=0
(1-b)x2-by2+bxyr-xq+1=0
上式中,只有x和y是未知数,且为二元二次方程,采用吴零点分解方法(可参考论文),求解出x,y以及之前的v,最后求出X,Y,Z:
Z=c'/√v,X=xZ,Y=yZ;
求出3d点到光心的距离之后(即3d点在相机坐标系下的据光心的距离),根据三角形相似原理,分别求出A,B.C点在相机坐标系下的坐标。


最后就是ICP问题,3d-3d,求R,t.最后将求出的R,t 再做非线性迭代,即可得到精度一般的pose。最后附上p3p流程:

PNP的学习-P3P的更多相关文章
- PNP的学习-EPNP
EPNP主要是利用已知的3d点,通过PCA选择4个控制点,建立新的局部坐标系,从而将3d坐标用新的控制点表示出来. 然后,利用相机投影模型和2d点,转换到相机坐标系中,再在相机坐标系中建立和世界坐标系 ...
- OpenCV 之 透视 n 点问题
透视 n 点问题,源自相机标定,是计算机视觉的经典问题,广泛应用在机器人定位.SLAM.AR/VR.摄影测量等领域 1 PnP 问题 1.1 定义 已知:相机的内参和畸变系数:世界坐标系中,n 个 ...
- 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇
驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB
JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...
- PHP的学习--cookie和session--来自copy_02
PHP的学习--cookie和session 最近读了一点<PHP核心技术与最佳实践>,看了cookie和session,有所收获,结合之前的认识参考了几篇博客,总结一下-- 1. P ...
- Android开发学习总结(六)—— APK反编译
学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译.我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或 ...
- IRP IO_STACK_LOCATION 《寒江独钓》内核学习笔记(1)
在学习内核过滤驱动的过程中,遇到了大量的涉及IRP操作的代码,这里有必要对IRP的数据结构和与之相关的API函数做一下笔记. 1. 相关阅读资料 <深入解析 windows 操作系统(第4版,中 ...
- jquery学习记录
1.选择器实例 语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 class=&q ...
- LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】
转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ...
随机推荐
- Delphi调用C#编写的WebService 注意事项
返回的字段值区分大小写,c#和Delphi的字段要一致
- 初学python笔记---列表
---恢复内容开始--- 1.列表的格式:用方括号([])来表示的,逗号来分隔元素,下标从0开始 2.根据下标来查看列表中元素,当索引为-1时,显示的是最后一个元素 print(a[0])-----1 ...
- CentOS7搭建Zookeeper环境
Linux下安装JDK 1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1.8.0 ...
- 101210-450789-147200(可以激活Xshell5,而且可以升级) 亲测可用 只能用于xshell5
101210-450789-147200(可以激活Xshell5,而且可以升级) 亲测可用 只能用于xshell5
- python之字典及其方法---整理集
字典 特点: 使用逗号分隔的key:value形式: 使用大括号括起来: key-value的键值对中,value部分可以是任意类型: 列表.字典不能做为字典的key: 字典是无序的,哪个key-va ...
- FileInputStream文件字节输入流程序
第一种:.read() 一次读一个字节,返回值类型是int,方法读取硬盘访问次数太频繁.缺点:效率低,伤硬盘 import java.io.FileInputStream; import java.i ...
- Spring:AOP
摘要 本文内容为我在网上搜集Spring AOP资料的汇总.摘抄. AOP是一种编程思想,其对不同对象进行了横向的抽象,将不同对象的.和主流程无关的公共逻辑抽象出来以方便维护.AOP的实现基础为AOP ...
- 2018-2019-2 20175218 实验一《Java开发环境的熟悉》实验报告
实验内容.步骤与体会: 1.实验过程的理解,实验指导书中知识点的理解. (1)知道了JVM.JRE.JDK之间的区别. JVM就是我们熟知的Java虚拟机:JRE是Java运行环境:而JDK则是Jav ...
- centos7上安装zabbix4.0
zabbix4.0已经推出有一段时间了,针对之前版本做了很多优化配置,易用性得到提高,特别lts(long team support)长技术支持版本,官方说提供5年的稳定技术支持,在商业化运用上,是比 ...
- 对webdriver-driver句柄的理解
先贴代码: from selenium import webdriver //首先导入selenium(webdriver)相关模块 driver = webdriver.Firefox() ...