ORB-SLAM2源码学习:Tracking.cc:GrabImageStereo、GrabImageRGBD、GrabImageMonocular处理图像

前言

该部分函数在Tracking.cc源文件中定义,用于处理图像。

1.函数作用:

1.GrabImageStereo 函数的主要作用是处理输入的双目图像(左视图和右视图),进行必要的预处理(颜色转换),创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。

cv::Mat Tracking::GrabImageStereo(const cv::Mat &imRectLeft, const cv::Mat &imRectRight, const double &timestamp)
{
    ....
}

2.GrabImageRGBD函数的主要作用是处理输入的 RGB-D 图像,进行必要的预处理(颜色转换、深度格式转换),创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。

cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double &timestamp)
{
    ....
}

3. GrabImageMonocular 函数的主要作用是处理输入的单目图像,进行必要的预处理(颜色转换),根据系统状态创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。

cv::Mat Tracking::GrabImageMonocular(const cv::Mat &im, const double &timestamp)
{
    ....
}

2.具体代码(以RGBD的为例)

cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double &timestamp)
{
    // 将传入的参数赋值给该函数的内部变量,用于进行数据处理。
    mImGray = imRGB;// 将输入的RGB图像赋值给mImGray(类成员变量CV:Mat)。
    cv::Mat imDepth = imD;// 将输入的深度图像复制到imDepth。

    //根据输入图像的通道数,确定其是RGB(3 通道)还是RGBA(4 通道)。
    if(mImGray.channels()==3)
    {
        // 如果是RGB,则RGB转灰度,如果是BGR,则BGR转灰度。
        if(mbRGB)// 头文件中定义的布尔变量mbRGB。如果 mbRGB为true,则说明图像是以RGB格式存储。
            cvtColor(mImGray,mImGray,CV_RGB2GRAY);//将原来的RGB图像转换成灰度图在存放到原变量中。
            // cvtColor 是 OpenCV 库中的一个函数,用于在不同的颜色空间之间转换图像。
            // CV_RGB2GRAY 是 OpenCV 定义的常量,表示 RGB 到灰度的转换方式。
        else
            cvtColor(mImGray,mImGray,CV_BGR2GRAY);
    }
    // 同理如上。
    else if(mImGray.channels()==4)
    {
        if(mbRGB)
            cvtColor(mImGray,mImGray,CV_RGBA2GRAY);
        else
            cvtColor(mImGray,mImGray,CV_BGRA2GRAY);
    }

    // 检查绝对值是否大于某个特定值或者检查imDepth的数据类型是否为 CV_32F
    if((fabs(mDepthMapFactor-1.0f)>1e-5) || imDepth.type()!=CV_32F)//浮点数类型成员函数mDepthMapFactor。
        // fabs()函数用于计算浮点数的绝对值。

      // 如果条件不成立则需要将深度图像imDepth转换为 32 位浮点格式
      imDepth.convertTo(imDepth,CV_32F,mDepthMapFactor);

    // 计算当前帧。
    mCurrentFrame = Frame(mImGray,imDepth,timestamp,mpORBextractorLeft,mpORBVocabulary,mK,mDistCoef,mbf,mThDepth);

    Track();

    // 返回mCurrentFrame中的mTcw(当前帧相对于世界坐标系的变换矩阵),并使用clone()方法返回其副本,确保外部调用者不直接修改mTcw。
    return mCurrentFrame.mTcw.clone();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值