SLAM ---- VINS 外点剔除

1. 外点剔除

1.1 前端外点剔除

vins-mono 中根据光流跟踪,得到匹配点对;
vins-fusion 中可以设置反向光流,进一步剔除

然后使用F基础矩阵进行剔除外点:rejectWithF()

原理介绍:
1. 输入的图片是带畸变的(如Euroc 单目数据集,为针孔相机模型)
2. 则需要先通过将像素坐标系转到归一化坐标系下并去畸变(可以用 camodocal 模型 liftProjective 完成)
3. liftProjective 之后得到归一化坐标系下的 3D点,除以 z ,得到 [x,y,1]形式的归一化平面上的点,再通过参数转到归一化的像素坐标系下(可以认为是转到去了畸变的图像上),然后进行基础矩阵F的求解,其中会调用RANSAC 进行剔除外点。 (参数:这儿的参数就是 FOCAL_LENGTH,COL / 2.0,ROW / 2.0,归一化坐标值乘以焦距转到像素坐标系,由于图片中原点在图片左上角,于是还需要进行关于原点的平移)
4. 使用的是经典的8点法求解,与本质矩阵 E 求解一样

给人的错觉就是 本质矩阵求解,有点疑惑,后续再看看!!!

void FeatureTracker::rejectWithF()
{
   
    if (forw_pts.size() >= 8)// 当前帧(追踪上)特征点数量足够多
    {
   
        ROS_DEBUG("FM ransac begins");
        TicToc t_f;
        // 1.遍历所有特征点,转化为归一化相机坐标系
        vector<cv::Point2f> un_cur_pts(cur_pts.size()), un_forw_pts(forw_pts.size());
        for (unsigned int i = 0; i < cur_pts.size(); i++)//遍历上一帧所有特征点
        {
   
 
            Eigen::Vector3d tmp_p;
            //对于PINHOLE(针孔相机)可将像素坐标转换到归一化平面并去畸变。根据不同的相机模型将二维坐标转换到三维坐标
            m_camera->liftProjective(Eigen::Vector2d(cur_pts[i].x, cur_pts[i].y), tmp_p);
            //转换为归一化像素坐标,上一帧和当前帧
            tmp_p.x() = FOCAL_LENGTH * tmp_p.x() / tmp_p.z() + COL / 2.0;
            tmp_p.y() = FOCAL_LENGTH * tmp_p.y() / tmp_p.z() + ROW / 2.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值