软件工程应用于实践第九篇

ORB-SLAM3 Pinhole.cpp相关代码理解与分析

2021SC@SDUSC


前言


一、Pinhole相机模型

Pinhole相机模型类是集成于GeometricCamera类,所以一些成员变量也直接继承
在这里插入图片描述
成员变量包括:mvParameters就是存放成像模型参数的vector。mnId用于指定当前对象的ID,mnType则是用于说明成像模型的类型。
在这里插入图片描述
Pinhole.h文件中的构造函数中主要就是设置了相机参数vector的长度、ID以及成像类型。
在这里插入图片描述
Pinhole类中重载了>>运算符,可以方便传入相机的参数。
以下是一些核心函数:

cv::Mat Pinhole::SkewSymmetricMatrix(const cv::Mat &v)
//将传入的相机参数转换成相机内参矩阵
Eigen::Vector2d Pinhole::project(const Eigen::Vector3d &v3D) 
cv::Mat Pinhole::projectMat(const cv::Point3f &p3D)
//上面两个函数针对不同输入数据进行了重载
cv::Point3f Pinhole::unproject(const cv::Point2f &p2D)
cv::Mat Pinhole::unprojectMat(const cv::Point2f &p2D)
//将2D转化为3D的函数

二、相机模型建立

在ORB-SLAM3系统中,通过Tracking的构造函数加载相机模型参数。除了加载相机模型参数,也加载了ORB参数和IMU参数。对应编写了ParseCamParamFile()、ParseORBParamFile()、ParseIMUParamFile()函数。
对于PinHole模型,分别从配置文件中读取相机的内参(fx,fy,cx,cy)以及畸变参数(k1,k2,p1,p2,k3),对于所有的内参,构造了临时vector变量vCamCalib用于存放。对于所有的畸变参数,都赋给了Tracking的Mat成员变量mDistCoef。在加载完所有参数以后,我们利用传入的内参新建一个Pinhole相机模型对象并将其赋给Tracking的成员变量mpCamera,再将其添加到地图集mpAtlas中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值