认真的虎ORBSLAM2源码解读(十一):PnPsolver,PnP求解器

这篇博客深入解读ORBSLAM2中的PnP求解器PnPSolver,包括关键函数iterate()和Refine()的详细分析,帮助读者理解PnP问题的解决方法。
摘要由CSDN通过智能技术生成

1.前言

1.1.参考博客

一起学ORBSLAM2(9)ORBSLAM的PNP解决方案
[PnP]PnP问题之EPnP解法

2.头文件

class PnPsolver {
   
 public:
   /**构造函数
    * @param vpMapPointMatches 保存F中的特征点与与哪些mappoint匹配,vpMapPointMatches[i]表示F中第i个特征点所指向的mappoint
    */
  PnPsolver(const Frame &F, const vector<MapPoint*> &vpMapPointMatches);

  ~PnPsolver();

  //设置参数
  void SetRansacParameters(double probability = 0.99, int minInliers = 8 , int maxIterations = 300, int minSet = 4, float epsilon = 0.4,
                           float th2 = 5.991);

  cv::Mat find(vector<bool> &vbInliers, int &nInliers);

  //循环nIterations次执行epnp算法
  cv::Mat iterate(int nIterations, bool &bNoMore, vector<bool> &vbInliers, int &nInliers);

 private:

   //对于此次RANSAC计算的epnp求得的位姿,原先F中的特征点与mappoint的匹配还有哪些成立
   //更新mnInliersi
  void CheckInliers();
  //以mvbBestInliers中的点对通过epnp计算位姿而不是先前使用4个点对计算位姿
  //如果计算的结果对应的inliner超过阈值mRansacMinInliers,则返回成功
  bool Refine();

  // Functions from the original EPnP code
  void set_maximum_number_of_correspondences(const int n);
  void reset_correspondences(void);
  // 将对应的3D-2D压入到pws和us
  void add_correspondence(const double X, const double Y, const double Z
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值