VINS-Mono代码学习记录(三)--feature_tracker

一、 feature_tracker.h中的变量理解

理解这些变量的含义非常重要,有一些非常容易搞混,让人费解。。。
直接看吧!

  cv::Mat mask;//图像掩膜
    cv::Mat fisheye_mask;//鱼眼相机的掩膜

    // prev_img是上一次发布的帧的图像数据
    // cur_img是光流跟踪的前一帧的图像数据
    // forw_img是光流跟踪的后一帧的图像数据
    cv::Mat prev_img, cur_img, forw_img;
    vector<cv::Point2f> n_pts;//每一帧中新提取的特征点
    vector<cv::Point2f> prev_pts, cur_pts, forw_pts;//对应的图像特征点
    vector<cv::Point2f> prev_un_pts, cur_un_pts;//归一化相机坐标系下的坐标
    vector<cv::Point2f> pts_velocity;//当前帧相对前一帧特征点沿x,y方向的像素移动速度
    vector<int> ids;//能够被跟踪到的特征点的id
    vector<int> track_cnt;//当前帧forw_img中每个特征点被追踪的次数
    map<int, cv::Point2f> cur_un_pts_map;//把特征点的id和点封装的数据类型
    map<int, cv::Point2f> prev_un_pts_map;
    camodocal::CameraPtr m_camera;//相机模型
    double cur_time;
    double prev_time;

    static int n_id;//用来作为特征点id,每检测到一个新的特征点,就将n_id作为该特征点的id,然后n_id加1
   
二、readImage(const cv::Mat &_img, double _cur_time)函数理解

有一个非常好用,真的帮助理解的参考,必须要奉上: https://blog.csdn.net/liuzheng1/article/details/89406276
它是我看到的对于帮助理解这个函数最容易的参考资料了。。。

void FeatureTracker::readImage(const cv::Mat &_img, double _cur_time)
{
    cv::Mat img;
    TicToc t_r;
    cur_time = _cur_time;

    //【1】判断图像是否需要均衡化
    if (EQUALIZE)//均衡化增强对比度 默认值为1,表示图像太亮或者太暗
    {
        cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE(3.0, cv::Size(8, 8));//opencv里头的函数
        TicToc t_c;
        clahe->apply(_img, img);
        ROS_DEBUG("CLAHE costs: %fms", t_c.toc());
    }
    else
        img = _img;

   //[2]如果当前帧的图像数据forw_img为空,说明当前是第一次读入图像数据,将读入的图像赋给当前帧forw_img,同时,还将读入的图像赋给prev_img、cur_img
    if (forw_img.empty())
    {
        prev_img = cur_img = forw_img = img;
    }
    else
    {
        forw_img = img;
    }

    forw_pts.clear();//此时forw_pts还保存的是上一帧图像中的特征点,所以把它清除

    //[3]判断光流跟踪前一帧中特征点规模是否不为0,不为0表示有图像数据点,对其进行光流跟踪
    if (cur_pts.size() > 0)
    {
        TicToc t_o;
        vector<uchar> status;//status表示 cur_pts和forw_pts中对应点对是否跟踪成功,无法被追踪到的点标记为0
        vector<float> err;
        cv::calcOpticalFlowPyrLK(cur_img, forw_img, cur_pts, forw_pts, status, err, cv::Size(21, 21), 3);//calcOpticalFlowPyrLK() 从cur_pts到forw_pts做LK金字塔光流法
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值