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

2019 年 9 月 10 日 计算机视觉life


点击上方“计算机视觉life”,选择“星标”

快速获得最新干货


前一篇文章《代码解读 | VINS 视觉前端》介绍了VINS前端。本文来说说鱼眼相机模型。

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

相机模型

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

代码解读

VINS_Mono中相机模型对应代码在

/VINS-Mono/camera_model/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) 中的 。


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,扫描查看介绍,3天内无条件退款

早就是优势,学习切忌单打独斗,这里有教程资料、练习作业、答疑解惑等,优质学习圈帮你少走弯路,快速入门!

交流群

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

推荐阅读

代码解读 | VINS 视觉前端

从零开始一起学习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 | ICP原理及应用

从零开始一起学习SLAM | 用四元数插值来对齐IMU和图像帧

可视化理解四元数,愿你不再掉头发

视觉SLAM技术综述

研究SLAM,对编程的要求有多高?

深度学习遇到SLAM | 如何评价基于深度学习的DeepVO,VINet,VidLoc?

现在开源的RGB-D SLAM有哪些?

详解 | SLAM回环检测问题

汇总 | SLAM、重建、语义相关数据集大全

吐血整理 | SLAM方向国内有哪些优秀的公司?

最强战队 | 三维视觉、SLAM方向全球顶尖实验室汇总

SLAM方向公众号、知乎、博客上有哪些大V可以关注?

汇总 | 最全 SLAM 开源数据集

综述 | SLAM回环检测方法

干货总结 | SLAM 面试常见问题及参考解答
2019 最新SLAM、定位、建图求职分享,看完感觉自己就是小菜鸡!
2019暑期计算机视觉实习应聘总结

2018年SLAM、三维视觉方向求职经验分享

经验分享 | SLAM、3D vision笔试面试问题


最新AI干货,我在看  

登录查看更多
16

相关内容

Mono 是一个由 Novell 公司(由Ximian发起,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。
【ICML2020】用于强化学习的对比无监督表示嵌入
专知会员服务
27+阅读 · 2020年7月6日
【开放书】SLAM 中的几何与学习方法,62页pdf
专知会员服务
109+阅读 · 2020年6月5日
《深度学习》圣经花书的数学推导、原理与Python代码实现
抢鲜看!13篇CVPR2020论文链接/开源代码/解读
专知会员服务
49+阅读 · 2020年2月26日
专知会员服务
86+阅读 · 2019年12月13日
【泡泡一分钟】利用四叉树加速的单目实时稠密建图
泡泡机器人SLAM
28+阅读 · 2019年4月26日
【泡泡读者来稿】VINS代码推导及论文解析(五)
泡泡机器人SLAM
29+阅读 · 2019年3月19日
【泡泡一分钟】基于运动估计的激光雷达和相机标定方法
泡泡机器人SLAM
25+阅读 · 2019年1月17日
【泡泡一分钟】LIMO:激光和单目相机融合的视觉里程计
泡泡机器人SLAM
11+阅读 · 2019年1月16日
【推荐】SLAM相关资源大列表
机器学习研究会
10+阅读 · 2017年8月18日
Monocular Plan View Networks for Autonomous Driving
Arxiv
6+阅读 · 2019年5月16日
Arxiv
5+阅读 · 2018年12月18日
VIP会员
相关资讯
【泡泡一分钟】利用四叉树加速的单目实时稠密建图
泡泡机器人SLAM
28+阅读 · 2019年4月26日
【泡泡读者来稿】VINS代码推导及论文解析(五)
泡泡机器人SLAM
29+阅读 · 2019年3月19日
【泡泡一分钟】基于运动估计的激光雷达和相机标定方法
泡泡机器人SLAM
25+阅读 · 2019年1月17日
【泡泡一分钟】LIMO:激光和单目相机融合的视觉里程计
泡泡机器人SLAM
11+阅读 · 2019年1月16日
【推荐】SLAM相关资源大列表
机器学习研究会
10+阅读 · 2017年8月18日
Top
微信扫码咨询专知VIP会员