相机模型之鱼眼模型(Equidistant)
相机模型之鱼眼相机模型(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=RcwPw+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)=[fxd(θ)cosϕ+cxfyd(θ)sinϕ+cy]=[udvd]
其中,
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(θ)=ZcXc2+Yc2ϕ=atan2(Yc,Xc)Pc=[Xc,Yc,Zc]=[rxycosϕ,rxysinϕ,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)=⎣⎡fxuu−cxfyvu−cy1⎦⎤d(θ)=(fxud−cx)2+(fyvd−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=(fxud−cx)2+(fyvd−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−cxvu−cy]=[ud−cxvd−cy]d(θ)tg(θ)
事实上,对于pinhole radial-tangential 畸变,也是采用类似的迭代方法求解。
相机模型之鱼眼模型(Equidistant)相关推荐
- 【鱼眼相机模型】鱼眼相机投影模型理解
一.从普通镜头到鱼眼镜头 如图1所示,普通镜头下的光线依据针孔相机模型进行成像(该部分可参考相机投影关系).但该模型存在一个缺陷:相机视野范围越大,所需的成像平面也越大,当相机视野范围要求在180°时 ...
- 相机模型-鱼眼模型/鱼眼镜头标定基本原理及实现(2)
问题: 1 广角/超广角与鱼眼摄像机,角度界限 2 畸变模型中radtan畸变模型与鱼眼畸变模型在小于150范围是否都时能适用. (同数据,拟合模型不同,,参数结果不同,不欠拟合和过拟合就可) 3 ...
- 鱼眼相机标定_鱼眼相机模型(二)
前言 在介绍其他相机模型之前,可以先看一下kalibr支持标定的相机模型(kalibr可以标定的相机模型),这里的相机模型一共有4种,针孔相机模型,全景相机模型,Double sphere相机模型还有 ...
- 相机模型-鱼眼模型(fisheye camera model)
鱼眼相机模型 (fisheye camera model) 模型介绍 等距投影 等立体角投影 正交投影 体视投影 线性投影 Kannala-Brandt 模型 去畸变过程 投影过程 反投影过程 雅可比 ...
- 2.3ORBSLAM3之相机模型与畸变模型
1.简介 主要内容: 1. 对SLAM中常见的相机模型进行介绍,包括针孔相机模型和鱼眼相机模型 2. 对每种相机模型的畸变模型进行介绍 3. 对VSLAM中常见的几种去畸变方法进行介绍 4. 对常见的 ...
- 从普通相机模型到鱼眼畸变模型--标定与去畸变
目录 普通相机模型 普通成像模型 针孔模型与透镜组: 径向畸变 切向畸变 现代手机摄像头的基本组成 内参矩阵 畸变模型 张氏标定法 鱼眼模型 透镜组 r和f的进一步说明 等距投影模型(OpenCV:: ...
- 相机标定:相机模型和畸变模型
一.相机标定方案 相机内参标定是确定内参和畸变参数(equidistqant畸变模型)或者(radial tangential模型)的过程. 本文首先介绍SLAM中常用的相机模型和畸变模型,随后介绍我 ...
- vue2 使用 cesium 【第二篇-相机视角移动+添加模型】
vue2 使用 cesium [第二篇-相机视角移动+添加模型] 搞了一阵子 cesium,小白入门,这东西很牛逼,但是感觉这东西好费劲啊!网上资料不多,每个人的用法又不一样,操作起来真的是绝绝子.之 ...
- ThreeJs场景、相机、渲染器、添加obj模型和删除模型
相机 效果图 1.安装threeJs npm install three 2.安装加载obj和mtl文件的插件 npm i --save three-obj-mtl-loader 3.安装轨道控件插件 ...
最新文章
- spring boot jpa级联保存
- Java 学习之网络编程案例
- mybatis实现自定义SQL并且请求参数是集合
- 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
- 程序员要常做好的几件事
- IOS学习笔记十六(NSString和NSMutableString)
- 【QMIX】一种基于Value-Based多智能体算法
- android开发百度地图坐标偏差,利用百度地图Android sdk高仿微信发送位置功能及遇到的问题...
- Python-闭包详解
- nginx proxy模块
- springBoot配置,贴个图
- pymssql的简单使用
- Android 源码下载并编译Rom
- 大学c语言怎么应付考试,二级c语言考试应对技巧
- 以下计算机网络新技术是什么,计算机网络新技术概述
- 什么3D建模软件适合初学者使用?
- tesorflow2.1.0环境下,tf.keras使用Range优化器(RAdam+Lookahead)
- 我的周刊(第028期)
- java ipv6校验_IPV6地址校验(java)
- 在 csproj 文件中使用系统环境变量的值(示例将 dll 生成到 AppData 目录下)
热门文章
- 使用图像直方图方式搜索相似图片
- STM32C8T6+RGB彩灯(驱动芯片WS28811、PWM两种调试方法)
- python列表实现_Python列表去重如何实现?列表去重的4种方式
- android sdk tools安装-01
- 凡事必先骑上虎背,给性格内向的程序员聊几句
- 程序员能干一辈子吗?性格内向的老实人,更适合程序员职业,工资高且不限年龄!
- mysql还原某个数据库_mysql还原某个数据库
- DF723(FT2000+) DF716(FT2000/4)基于grub2.05、openEuler 20.03内核、busybox1.32.1源码制作最小系统U盘
- 如何在Ubuntu下使用QQ
- windos服务器性能监控