专栏首页计算机视觉life代码解读 | VINS_Mono中的鱼眼相机模型

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/electech6/article/details/101380724

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

VINS_Mono中的鱼眼相机模型

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

相机模型

投影模型

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

代码解读

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【深度相机系列二】深度相机原理揭秘--飞行时间(TOF)

    深度相机按照深度测量原理不同,一般分为:飞行时间法、结构光法、双目立体视觉法。本文就来说一说飞行时间法。 飞行时间是从Time of Flight直译过来...

    用户1150922
  • 什么是多模态机器学习?

    每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉,嗅觉;信息的媒介,有语音、视频、文字等;多种多样的传感器,如雷达、红外、加速度计等。以...

    用户1150922
  • Git diffmerge 工具的配置及问题解决

    最近使用git时发现git diff 不方便,尤其是代码改动较大的时候,需要分成很多行,通过空格翻页对比,用户体验极差

    用户1150922
  • Ubuntu配置开发环境

    如果不习惯Vim,强烈建议VSCodehttps://code.visualstudio.com/

    py3study
  • 深度学习笔记总结(2) 改善深层神经网络:超参数调试、 正则化以及优化

    如果我们的模型太简单并且参数很少,那么它可能具有高偏差和低方差。另一方面,如果我们的模型具有大量参数,那么它将具有高方差和低偏差。因此,我们需要找到正确/良好的...

    致Great
  • 【玩转腾讯云】快速搭建私有文档编辑系统 支持Markdown

    TopDocs 是一个开源的基于graphql、nuxtjs、mongodb、keystonejs的实时在线文档编辑系统,可用作各种在线文档编辑和展示,支持ma...

    用户7148954
  • 安全帽识别的前端与后端功能分析

    近年来,监管部门对建筑工地的要求越来越高了,为保障工地现场人员安全,智慧工地解决方案增加了更多的管理方式,其中安全帽识别已经成为智慧工地的重要管理手段。

    强美智能科技
  • Toolbar去除标题与返回键间的间距

    标题和左侧的返回键间距过大,之前在做CloudReader的时候就遇到了,一直没有解决,由于自身强迫症,心里始终和这个过不去,就研究了很久终于解决了。

    Jingbin
  • Github 项目推荐 | 用手势输入表情符号 —— Emojinator

    此代码可以帮助开发者识别和分类不同的 Emoji 图像,不过目前只支持手绘的 Emoji 图像。

    AI研习社
  • vscode源码分析【六】服务实例化和单例的实现

    细心的读者可能会发现,在第四篇文章中的createService方法中,并没有把所有的服务实例化,下面这些服务,只是记了他们的类型: src\vs\code...

    liulun

扫码关注云+社区

领取腾讯云代金券