PnP(Perspective n Points):2D—3D,求解相机位姿
PnP(Perspective n Points)就是你有n个点的3D位置和它们的投影,然后要算相机的位姿。这个倒是SLAM里最常见的情况,因为你会有一堆的地图点和像素点等着你算。PnP的做法有好多种:直接线性变换,P3P,EPnP,UPnP等等,基本你去找OpenCV的SolvePnP中的参数即可,好用的都在那里。除此之外,通常认为线性方程解PnP,在有噪声的情况下表现不佳,所以一般以EPnP之类的解为初始值,构建一个Bundle Adjustment(BA)去做优化。
一、函数介绍
源码位置:An example of how to use solvePNPRansac for object detection can be found at opencv_source_code/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/
二、例子
cv::Mat rvec = cv::Mat::zeros(3, 1, CV_32FC1); // output rotation vector
cv::Mat tvec = cv::Mat::zeros(3, 1, CV_32FC1);
// RANSAC parameters
int iterationsCount = 300; // number of Ransac iterations.
float reprojectionError = 5.991; // maximum allowed distance to consider it an inlier.
double confidence = 0.95; // ransac successful confidence.