PnP算法

PnP(Perspective-n-Point)是求解3D到2D点的对应方法。它描述了当知道n个3D空间点及其位置,如何估计相机的位姿。如果两张图像中的一张特征点3D位置已知,那么至少需要3个点对(以及至少一个额外验证点验证结果)就可以计算相机的运动。

PnP的应用范围很广比如两阶段法的6D姿态估计以及视觉SLAM等等。

特征点的3D位置可以由三角化或者RGB-D相机的深度图确定,当然还有其他方法。

PnP的数学模型

PnP问题的几何结构如下图所示,给定3D点的坐标以及对应2D点的坐标以及内参矩阵,求解相机的姿态。

图片

OpenCV 中的 PNP 求解函数

void solvePnP(InputArray objectPoints,

              InputArray imagePoints,

              InputArray cameraMatrix,

              InputArray distCoeffs,

              OutputArray rvec,

              OutputArray tvec,

              bool useExtrinsicGuess=false,

              int flags = CV_ITERATIVE);

参数:

objectPoints - 世界坐标系下的控制点的坐标,vector<Point3f> 的数据类型在这里可以使用

imagePoints - 在图像坐标系下对应的控制点的坐标。vector<Point2f> 在这里可以使用

cameraMatrix - 相机的内参矩阵,通过相机标定可以得到

distCoeffs - 相机的畸变系数,通过相机标定可以得到

rvec - 输出的旋转向量。使坐标点从世界坐标系旋转到相机坐标系

tvec - 输出的平移向量。使坐标点从世界坐标系平移到相机坐标系

flags - 默认使用CV_ITERATIV迭代法

solvePnP 里有三种解法:P3P, EPnP,迭代法(默认)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值