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形成一个三