admin 管理员组

文章数量: 1184232

PnP

本文主要介绍关于PnP(pespective-n-point)的一些方法。这个问题是一个经典的视觉测量问题。这里介绍一下常用的几种方法

问题的方案、解决思路

最小PnP问题

P3P问题中假设没有噪声,使用几何约束,可以解得相机的位姿。不具有唯一解。
P4P问题中分为线性方法和基于P3P的方法。

最小二乘的观点

  • 迭代最小化一个代价函数(平方误差)。这些方法相对于之前的方法更加准确,在一定的噪声的情况下,返回一个最大似然估计。
  • 直接最小二乘方法DLS

常用方法

  • NPL: The N-Point Linear (NPL) method of Ansar and Daniilidis [1].
  • EPnP: The approach of Lepitit et al. [16].
  • SDP: The Semi Definite Program (SDP) approach of Schweighofer and Pinz [23].
  • DLS: The Direct Least-Squares (DLS) solution presented in this paper. An open source implementation of DLS is available at www.umn.edu/ ̃joel
  • DLS-LM: Maximum-likelihood estimate, computed using iterative Levenberg-Marquardt (LM) minimization of the sum of the squared reprojection errors, initialized with DLS.

opencv

solvePnP里有三种解法:P3P, EPnP,迭代法(默认);opencv2里参数分别为CV_P3P,CV_EPNP,CV_ITERATIVE (opencv3里多了DLS和UPnP解法)。
注意点2:solvePnP需要至少3组点:P3P只使用4组点,3组求出多个解,第四组确定最优解;EPnP使用大于等于3组点;迭代法调用cvFindExtrinsicCameraParams2,进而使用SVD分解并调用cvFindHomography,而cvFindHomography需要至少4组点。
具体过程如下
- 将空间点和图像点齐次化,得到图像点矩阵 m 空间点矩阵 M ,求取矩阵M的平均值 Mc
- 计算另外一个矩阵 mm=(M−Mc)T(M−Mc)
- 对空间点矩阵 mm 进行SVD分解, mm=UWV
- Rt=V
- Tt=−McRt
- Mxy=VtMT+Tt
- find homography between ( m 和 Mxy )得到矩阵 H
- H=[h1,h2,t] ,然后归一化
- h1=h1∥h1∥
- t=t∥h1∥+∥h2∥
- h3=h1×h2
- H:=[h1,h2,h3]
- 最终结果 Rf=H∗Rt
- tf=H∗Tt+t

其他

R的第i行 表示摄像机坐标系中的第i个坐标轴方向的单位向量在世界坐标系里的坐标;
R的第i列 表示世界坐标系中的第i个坐标轴方向的单位向量在摄像机坐标系里的坐标;
t 表示世界坐标系的原点在摄像机坐标系的坐标;
-R的转置 * t 表示摄像机坐标系的原点在世界坐标系的坐标。(原理如下图,t表示平移,T表示转置)

DLS

  1. .1002/rob.21620/epdf
  2. .html
  3. .cpp

本文标签: PnP