代码解读 | VINS_Mono中的鱼眼相机模型

二次信任 提交于 2019-12-06 01:41:27

本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS_Mono中的鱼眼相机模型

VINS_Mono中的鱼眼相机模型

VINS_Mono代码支持的相机包括针孔模型和鱼眼模型相机,针孔模型大家都比较熟悉了,今天向大家介绍一种鱼眼相机模型——MEI模型及其标定方法。

相机模型

投影模型

相比针孔模型可以将3d点直接投影到归一化平面,鱼眼相机则多了一个中间过程:先将3d点投影到单位球面,再将单位球面上的点投影到归一化平面上。废话不多说,请看鱼眼相机投影模型示意图:

file

代码解读

VINSMono中相机模型对应代码在/VINS-Mono/cameramodel/src/camera_models/CataCamera.cc文件**liftSphere**()函数中,该函数是将$2d$ 投影到$3d$ 点(单位球面上),首先对$2d$去畸变,然后再投影到单位球面上。

去畸变过程代码如下:

//去畸变过程
     int n = 6;
    Eigen::Vector2d d_u;
    distortion(Eigen::Vector2d(mx_d, my_d), d_u);//得到畸变量
    // Approximate value
    mx_u = mx_d - d_u(0);
    my_u = my_d - d_u(1);

    for (int i = 1; i < n;   i)//循环去畸变多次,使结果更接近真值
    {
        distortion(Eigen::Vector2d(mx_u, my_u), d_u);
        mx_u = mx_d - d_u(0);
        my_u = my_d - d_u(1);
    }

将去畸变后的$2d$ 点投影到归一化球面代码如下:

    double xi = mParameters.xi();
    if (xi == 1.0) 
    {
        lambda = 2.0 / (mx_u * mx_u   my_u * my_u   1.0);
        P << lambda * mx_u, lambda * my_u, lambda - 1.0;
    }
    else
    {
        lambda = (xi   sqrt(1.0   (1.0 - xi * xi) * (mx_u * mx_u   my_u * my_u))) / (1.0   mx_u * mx_u   my_u * my_u);
        P << lambda * mx_u, lambda * my_u, lambda - xi;
    }

其中xi对应公式$(7)$ 中的$ xi$ 。

reference

  1. Mei, C. and P. Rives. Single view point omnidirectional camera calibration from planar grids. in Robotics and Automation, 2007 IEEE International Conference on. 2007. IEEE.
  2. Jamaluddin A Z , Mazhar O , Morel O , et al. Design and calibration of an omni-RGB D camera. International Conference on Ubiquitous Robots & Ambient Intelligence. IEEE, 2016.
  3. Camera Calibration

交流群欢迎加入公众号读者群一起和同行交流,目前有SLAM、算法竞赛、图像检测分割、人脸人体、医学影像、自动驾驶、综合等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称 学校/公司 研究方向“,例如:”张三 上海交大 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

推荐阅读

如何从零开始系统化学习视觉SLAM?从零开始一起学习SLAM | 为什么要学SLAM?从零开始一起学习SLAM | 学习SLAM到底需要学什么?从零开始一起学习SLAM | SLAM有什么用?从零开始一起学习SLAM | C 新特性要不要学?从零开始一起学习SLAM | 为什么要用齐次坐标?从零开始一起学习SLAM | 三维空间刚体的旋转从零开始一起学习SLAM | 为啥需要李群与李代数?从零开始一起学习SLAM | 相机成像模型从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?从零开始一起学习SLAM | 神奇的单应矩阵从零开始一起学习SLAM | 你好,点云从零开始一起学习SLAM | 给点云加个滤网从零开始一起学习SLAM | 点云平滑法线估计从零开始一起学习SLAM | 点云到网格的进化从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码从零开始一起学习SLAM | 掌握g2o顶点编程套路从零开始一起学习SLAM | 掌握g2o边的代码套路从零开始一起学习SLAM | 用四元数插值来对齐IMU和图像帧零基础小白,如何入门计算机视觉?SLAM领域牛人、牛实验室、牛研究成果梳理我用MATLAB撸了一个2D LiDAR SLAM可视化理解四元数,愿你不再掉头发最近一年语义SLAM有哪些代表性工作?视觉SLAM技术综述汇总 | VIO、激光SLAM相关论文分类集锦研究SLAM,对编程的要求有多高?2018年SLAM、三维视觉方向求职经验分享2018年SLAM、三维视觉方向求职经验分享深度学习遇到SLAM | 如何评价基于深度学习的DeepVO,VINet,VidLoc?AI资源对接需求汇总:第1期AI资源对接需求汇总:第2期AI资源对接需求汇总:第3期
计算机视觉是人工智能之眼。公众号已原创170篇文章,兼具系统性,严谨性,易读性,菜单栏点击“汇总分类”查看原创系列包括:三维视觉、视觉SLAM、深度学习、机器学习、深度相机、入门科普、CV方向简介、手机双摄、全景相机、相机标定、医学图像、前沿会议、机器人、ARVR、行业趋势等。同时有入门基础、项目实战、面试经验、教学资料等干货。一键关注星标,加技术交流群,一起进步。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!