博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PnP 单目相机位姿估计(一):初识PnP问题
阅读量:2383 次
发布时间:2019-05-10

本文共 1099 字,大约阅读时间需要 3 分钟。



IDE:visual studio 2013

使用库:Eigen opencv2.4.9
文档版本:1.1


简介

  PnP问题是求解3D-2D点对运动的方法。他描述了当知道n个三维空间点坐标及其二维投影位置时,如何估计相机的位姿。我们可以想象,在一幅图像中,最少只要知道三个点的空间坐标即3D坐标,就可以用于估计相机的运动以及相机的姿态。

  而特征点的空间坐标,我们可以通过深度图来确定,亦可在程序初始化时,通过设定世界坐标系的方法解得,具体请看后篇几篇博文。

  因此,PnP方法不需要使用对极约束,又可以在很少的匹配点中获得较好的运动估计。是一种重要的姿态估计方法。

  而PnP常见的解法有 直接线性变换、P3P、BA等,在后续几篇博文中,将以基于opencv的solvepnp(P4P)同时借助简单的二维码QRcode来实现相机位姿的估计。


理解

以下讨论中设相机位于点Oc,P1、P2、P3……为特征点。

当N=1时

  当只有一个特征点P1,我们假设它就在图像的正中央,那么显然向量OcP1就是相机坐标系中的Z轴,此事相机永远是面对P1,于是相机可能的位置就是在以P1为球心的球面上,再一个就是球的半径也无法确定,于是有无数个解。


当N=2时

  现在多了一个约束条件,显然OcP1P2形成一个三角形,由于P1、P2两点位置确定,三角形的变P1P2确定,再加上向量OcP1,OcP2从Oc点射线特征点的方向角也能确定,于是能够计算出OcP1的长度=r1,OcP2的长度=r2。于是这种情况下得到两个球:以P1为球心,半径为r1的球A;以P2为球心,半径为r2的球B。显然,相机位于球A,球B的相交处,依旧是无数个解。


当N=3时

  与上述相似,这次又多了一个以P3为球心的球C,相机这次位于ABC三个球面的相交处,终于不再是无数个解了,这次应该会有4个解,其中一个就是我们需要的真解了。


当N大于3时

  N=3时求出4组解,好像再加一个点就能解决这个问题了,事实上也几乎如此。说几乎是因为还有其他一些特殊情况,这些特殊情况就不再讨论了。N>3后,能够求出正解了,但为了一个正解就又要多加一个球D显然不够”环保”,为了更快更节省计算机资源地解决问题,先用3个点计算出4组解获得四个旋转矩阵、平移矩阵。根据公式:


  将第四个点的世界坐标代入公式,获得其在图像中的四个投影(一个解对应一个投影),取出其中投影误差最小的那个解,就是我们所需要的正解。

  PNP问题的求解原理大致就是上面这样了,在后续几篇博文中,我们将以二维码(QRcode)的形式,来进行相机位姿的计算。

 

转载地址:http://utbab.baihongyu.com/

你可能感兴趣的文章
pkg-config指南
查看>>
不用任何变量,实现strlen函数
查看>>
关于C语言的位移操作
查看>>
由“输出从1到1000的数”想到的
查看>>
键盘上各个按键的英文名
查看>>
Linux系统文本模式下的截屏技巧
查看>>
php中$_Get $_POST $_REQUEST区别
查看>>
PHP - 解决中文乱码问题
查看>>
php empty() isset() is_null()
查看>>
PHP学习-面向对象
查看>>
js页面跳转整理
查看>>
在64位Win7操作系统中安装Microsoft Access Engine的解决方案
查看>>
30类CSS选择器
查看>>
微信支付的使用介绍
查看>>
PHP单例模式应用详解
查看>>
冒号课堂§5.2:数据类型
查看>>
博客搬家
查看>>
冒号课堂§6.2:平台语言
查看>>
《关于信息系统组织方式的一个提案》的评论与反评
查看>>
冒号和他的学生们(连载10)——超级范式
查看>>