相机模型之鱼眼相机模型(Equidistant/Kannala-Brandt)

文章目录

  • 相机模型之鱼眼相机模型(Equidistant/Kannala-Brandt)
  • 前言
  • Equidistant投影模型
  • 反投影(lift 过程,参考OpenCV实现)

前言

视觉SLAM、SFM方法中少不了要和各种相机模型打交道,这里把经常碰到的各种相机模型做个系统性的梳理。


Equidistant投影模型

Equidistant模型是由Kannala-Brandt提出的相机模型,描述径向畸变,适用于FOV不超过170°的大广角相机,但不适合FOV更大的全景相机模型。
需要说明的是,鱼眼相机和鱼眼相机模型是两回事。通常FOV很大,畸变比较显著的相机都可以叫鱼眼相机,例如EUCM模型、double sphere模型的相机;但是鱼眼模型则特指Equidistant 模型。

假设相机当前姿态用SE3群表示,将W系中的点转化为相机坐标系,则世界坐标系中一个3d点PwP_wPw​
到像极坐标系下一点PcP_cPc​的变换关系为:
Pc=RcwPw+tcwP_c=R_{cw}P_w+t_{cw}Pc​=Rcw​Pw​+tcw​
对于大多数相机FOV都不超过180°,则意味着镜头不能看到后面的物体,因而判断PcP_cPc​的z分量是否大于0,可以作为一个点是否能被相机看见的简单依据;除此以外,点能否被看见还与相机的视野有关系。
对于相机投影来说,只需要知道PcP_cPc​就够了,不关心PwP_wPw​,求PwP_wPw​一般是SFM和SLAM的任务。
严格的说,相机只关心PcP_cPc​的方向,模长或者深度都不关心。假设PcP_cPc​在相机平面上的投影成像点是
(ud,vd)(u_d,v_d)(ud​,vd​),则投影过程是:
π(Pc)=[fxd(θ)cos⁡ϕ+cxfyd(θ)sin⁡ϕ+cy]=[udvd]\pi(P_c)=\left[ \begin{array}{c} f_xd(\theta )\cos\phi+c_x\\ f_yd(\theta)\sin\phi +c_y \end{array} \right]= \left[ \begin{array}{c} u_d \\ v_d \end{array} \right]\\ π(Pc​)=[fx​d(θ)cosϕ+cx​fy​d(θ)sinϕ+cy​​]=[ud​vd​​]
其中,
tan⁡(θ)=Xc2+Yc2Zcϕ=atan2(Yc,Xc)Pc=[Xc,Yc,Zc]=[rxycos⁡ϕ,rxysin⁡ϕ,rxy/tg⁡θ]d(θ)=θ(1+k2θ2+k3θ4+k4θ6+k5θ8)\tan(\theta)=\frac{\sqrt{X_c^2+Y_c^2}}{Z_c}\\ \phi=atan2(Y_c,X_c)\\ P_c=[X_c,Y_c,Z_c] =[r_{xy}\cos\phi,r_{xy}\sin\phi,r_{xy}/\tg\theta] \\ d(\theta) =\theta (1+k_{2}\theta^2+k_3\theta^4+k_4\theta^6+k_5\theta^8) tan(θ)=Zc​Xc2​+Yc2​​​ϕ=atan2(Yc​,Xc​)Pc​=[Xc​,Yc​,Zc​]=[rxy​cosϕ,rxy​sinϕ,rxy​/tgθ]d(θ)=θ(1+k2​θ2+k3​θ4+k4​θ6+k5​θ8)
需要注意的是,并不是k2,k3,k4,k5k_2,k_3,k_4,k_5k2​,k3​,k4​,k5​参数等于0就对应于无畸变投影,只有当d(θ)=tg⁡(θ)d(\theta)=\tg(\theta)d(θ)=tg(θ)时才对应于无畸变的针孔相机模型。
由于θ\thetaθ趋向于90°时,d(θ)d(\theta)d(θ)函数有奇异性,因此该模型无法表示超过180°的FOV。实际使用中,θ\thetaθ不能超过85°。

反投影(lift 过程,参考OpenCV实现)


从3d点投影到相平面上,损失了深度信息。从图像上一个像素到3点入射方向的映射,就是反投影过程,又叫lift过程。
假设入射的点按照理想的针孔相机模型投影到(uu,vu)(u_u,v_u)(uu​,vu​)点,则lift到z=1的平面的操作定义为:
π−1(ud,vd,z=1)=[uu−cxfxvu−cyfy1]d(θ)=(ud−cxfx)2+(vd−cyfy)2θ=d−1(θ)\pi^{-1}(u_d,v_d,z=1) = \left[ \begin{array}{c} \frac{u_u-c_x}{f_x} \\ \frac{v_u-c_y}{f_y} \\ 1 \end{array} \right] \\ d(\theta)=\sqrt{(\frac{u_d-c_x}{f_x})^2+(\frac{v_d-c_y}{f_y})^2} \\ \theta=d^{-1}(\theta) π−1(ud​,vd​,z=1)=⎣⎡​fx​uu​−cx​​fy​vu​−cy​​1​⎦⎤​d(θ)=(fx​ud​−cx​​)2+(fy​vd​−cy​​)2​θ=d−1(θ)
直接解析求d−1(θ)d^{-1}(\theta)d−1(θ)是不现实的,OpenCV采用的是迭代求解方法,速度也很快。
初始首先令θd=(ud−cxfx)2+(vd−cyfy)2\theta_d=\sqrt{(\frac{u_d-c_x}{f_x})^2+(\frac{v_d-c_y}{f_y})^2}θd​=(fx​ud​−cx​​)2+(fy​vd​−cy​​)2​,利用如下关系:
θd=θ(1+k2θ2+k3θ4+k4θ6+k5θ8)θ=θd(1+k2θ2+k3θ4+k4θ6+k5θ8)\theta_d=\theta (1+k_{2}\theta^2+k_3\theta^4+k_4\theta^6+k_5\theta^8) \\ \theta=\frac{\theta_d}{ (1+k_{2}\theta^2+k_3\theta^4+k_4\theta^6+k_5\theta^8)} θd​=θ(1+k2​θ2+k3​θ4+k4​θ6+k5​θ8)θ=(1+k2​θ2+k3​θ4+k4​θ6+k5​θ8)θd​​
迭代求解格式:
θ0=θdθi+1=θd(1+k2θi2+k3θi4+k4θi6+k5θi8)\theta_{0} = \theta_d \\ \theta_{i+1}=\frac{\theta_d}{ (1+k_{2}\theta_{i}^2+k_3\theta_{i}^4+k_4\theta_{i}^6+k_5\theta_{i}^8)} θ0​=θd​θi+1​=(1+k2​θi2​+k3​θi4​+k4​θi6​+k5​θi8​)θd​​
OpenCV固定迭代10次。一旦求解出θ\thetaθ,(uu,vu)(u_u,v_u)(uu​,vu​)与(ud,vd)(u_d,v_d)(ud​,vd​)的关系如下:
[uu−cxvu−cy]=[ud−cxvd−cy]tg⁡(θ)d(θ)\left[ \begin{array}{l} u_u-c_x \\ v_u-c_y \end{array} \right] = \left[ \begin{array}{l} u_d-c_x \\ v_d-c_y \end{array} \right] \frac{\tg(\theta)}{d(\theta)} [uu​−cx​vu​−cy​​]=[ud​−cx​vd​−cy​​]d(θ)tg(θ)​
事实上,对于pinhole radial-tangential 畸变,也是采用类似的迭代方法求解。

相机模型之鱼眼模型(Equidistant)相关推荐

  1. 【鱼眼相机模型】鱼眼相机投影模型理解

    一.从普通镜头到鱼眼镜头 如图1所示,普通镜头下的光线依据针孔相机模型进行成像(该部分可参考相机投影关系).但该模型存在一个缺陷:相机视野范围越大,所需的成像平面也越大,当相机视野范围要求在180°时 ...

  2. 相机模型-鱼眼模型/鱼眼镜头标定基本原理及实现(2)

    问题: 1 广角/超广角与鱼眼摄像机,角度界限 2 畸变模型中radtan畸变模型与鱼眼畸变模型在小于150范围是否都时能适用.   (同数据,拟合模型不同,,参数结果不同,不欠拟合和过拟合就可) 3 ...

  3. 鱼眼相机标定_鱼眼相机模型(二)

    前言 在介绍其他相机模型之前,可以先看一下kalibr支持标定的相机模型(kalibr可以标定的相机模型),这里的相机模型一共有4种,针孔相机模型,全景相机模型,Double sphere相机模型还有 ...

  4. 相机模型-鱼眼模型(fisheye camera model)

    鱼眼相机模型 (fisheye camera model) 模型介绍 等距投影 等立体角投影 正交投影 体视投影 线性投影 Kannala-Brandt 模型 去畸变过程 投影过程 反投影过程 雅可比 ...

  5. 2.3ORBSLAM3之相机模型与畸变模型

    1.简介 主要内容: 1. 对SLAM中常见的相机模型进行介绍,包括针孔相机模型和鱼眼相机模型 2. 对每种相机模型的畸变模型进行介绍 3. 对VSLAM中常见的几种去畸变方法进行介绍 4. 对常见的 ...

  6. 从普通相机模型到鱼眼畸变模型--标定与去畸变

    目录 普通相机模型 普通成像模型 针孔模型与透镜组: 径向畸变 切向畸变 现代手机摄像头的基本组成 内参矩阵 畸变模型 张氏标定法 鱼眼模型 透镜组 r和f的进一步说明 等距投影模型(OpenCV:: ...

  7. 相机标定:相机模型和畸变模型

    一.相机标定方案 相机内参标定是确定内参和畸变参数(equidistqant畸变模型)或者(radial tangential模型)的过程. 本文首先介绍SLAM中常用的相机模型和畸变模型,随后介绍我 ...

  8. vue2 使用 cesium 【第二篇-相机视角移动+添加模型】

    vue2 使用 cesium [第二篇-相机视角移动+添加模型] 搞了一阵子 cesium,小白入门,这东西很牛逼,但是感觉这东西好费劲啊!网上资料不多,每个人的用法又不一样,操作起来真的是绝绝子.之 ...

  9. ThreeJs场景、相机、渲染器、添加obj模型和删除模型

    相机 效果图 1.安装threeJs npm install three 2.安装加载obj和mtl文件的插件 npm i --save three-obj-mtl-loader 3.安装轨道控件插件 ...

最新文章

  1. spring boot jpa级联保存
  2. Java 学习之网络编程案例
  3. mybatis实现自定义SQL并且请求参数是集合
  4. 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
  5. 程序员要常做好的几件事
  6. IOS学习笔记十六(NSString和NSMutableString)
  7. 【QMIX】一种基于Value-Based多智能体算法
  8. android开发百度地图坐标偏差,利用百度地图Android sdk高仿微信发送位置功能及遇到的问题...
  9. Python-闭包详解
  10. nginx proxy模块
  11. springBoot配置,贴个图
  12. pymssql的简单使用
  13. Android 源码下载并编译Rom
  14. 大学c语言怎么应付考试,二级c语言考试应对技巧
  15. 以下计算机网络新技术是什么,计算机网络新技术概述
  16. 什么3D建模软件适合初学者使用?
  17. tesorflow2.1.0环境下,tf.keras使用Range优化器(RAdam+Lookahead)
  18. 我的周刊(第028期)
  19. java ipv6校验_IPV6地址校验(java)
  20. 在 csproj 文件中使用系统环境变量的值(示例将 dll 生成到 AppData 目录下)

热门文章

  1. 使用图像直方图方式搜索相似图片
  2. STM32C8T6+RGB彩灯(驱动芯片WS28811、PWM两种调试方法)
  3. python列表实现_Python列表去重如何实现?列表去重的4种方式
  4. android sdk tools安装-01
  5. 凡事必先骑上虎背,给性格内向的程序员聊几句
  6. 程序员能干一辈子吗?性格内向的老实人,更适合程序员职业,工资高且不限年龄!
  7. mysql还原某个数据库_mysql还原某个数据库
  8. DF723(FT2000+) DF716(FT2000/4)基于grub2.05、openEuler 20.03内核、busybox1.32.1源码制作最小系统U盘
  9. 如何在Ubuntu下使用QQ
  10. windos服务器性能监控