【视觉SLAM入门】3. 相机模型,内外参,畸变推导

news2024/9/20 6:09:35

"瑾瑜匿瑕"

    • 1. 相机模型和内参
        • 1.1 内参推导
        • 1.2 外参推导
    • 2. 畸变
        • 2.1 径向畸变
        • 2.2 切向畸变
    • 3. 深度信息
        • 3.1 算法测距
        • 3.2 物理测距

  • 本节讨论围绕这个问题展开 机器人如何观测外部世界? \quad\large\textcolor{red}{机器人如何观测外部世界?} 机器人如何观测外部世界?

注意: 的研究的目的是为了求出点在世界坐标系下的信息,也就是    P w \;P_w Pw 是要求出来的量。

1. 相机模型和内参

  1. 以针孔相机为例,我们来推导内参的由来,首先在三维世界中,拍照的数学模型如下(左):

图源SLAM14讲话

以光心为原点的一组相似三角形(对顶角的),取它的    x o z \; xoz xoz 或者    y o z \; yoz yoz 投影上图(右):
成像过程: 空间中一点(以相机为坐标系看)    P = [ X , Y , Z ] T ⟹ \; \boldsymbol {P=[X,Y,Z]^T} \\\qquad\qquad \Longrightarrow P=[X,Y,Z]T 投影到物理成像平面    P ′ = [ X ′ , Y ′ , Z ′ ] T 由上图, Z ′ = f ( 焦距 ) ⟹ \; \boldsymbol {P'=[X',Y',Z']^T}由上图,Z'=f(焦距)\\\qquad \qquad \Longrightarrow P=[X,Y,Z]T由上图,Z=f(焦距)缩放和光心平移到(像素坐标系)    p ′ = [ u , v ] T \boldsymbol {\; p'=[u, v]}^T p=[u,v]T

1.1 内参推导

   \; 本来推导出的相似三角形应该有负号(针孔模型–倒立),但是我们选择为正(将对顶角对称到同侧(同角)),如下:
在这里插入图片描述
由相似关系:
Z Z ′ 即 Z f = X X ′ = Y Y ′ \frac {Z}{Z'}即\frac {Z}{f}= \frac {X}{X'} = \frac {Y}{Y'} ZZfZ=XX=YY
整理(这就是相机坐标系下点P到成像平面的步骤,对应上边第一个 ⟹ \Longrightarrow ):
X ′ = f X Z , Y ′ = f Y Z ( 1 ) X'= f\frac {X}{Z},\quad Y'= f\frac {Y}{Z} \qquad\qquad\qquad(1) X=fZX,Y=fZY(1)
像素坐标系:和成像平面只差    缩放      \;\textbf {缩放}\;\; 缩放(X缩放 α \alpha α得到 u      u\;\; uY缩放 β \beta β得到 v      v\;\; v)和      光心(原点)      \;\;\textbf {光心(原点)}\;\; 光心(原点)的平移      [ c x , c y ] T \;\; [c_x,c_y]^T [cx,cy]T,看不懂直接看下边式子:
{ u = α X ′ + c x = 带入式 1 α f X Z + c x = 记 a f 为 f x f x X Z + c x v = β Y ′ + c y = 带入式 1 β f Y Z + c x = 记 β f 为 f y f y Y Z + c y ⇓ 写成矩阵形式如下 ( 齐次坐标 ) ( u v 1 ) = 1 Z ( f x 0 c x 0 f x c y 0 0 1 ) ( X Y Z ) ≜ 1 Z K P ⇓ 更经常的我们会这么写 Z ( u v 1 ) = ( f x 0 c x 0 f x c y 0 0 1 ) ( X Y Z ) ≜ K P ( 2 ) \begin{cases} u=\alpha X'+c_x \overset{带入式1}{=} \alpha f\frac {X}{Z} +c_x \overset{记af为f_x} {=}f_x\frac {X}{Z}+c_x\\ v=\beta Y'+c_y \overset{带入式1}{=} \beta f\frac {Y}{Z} +c_x \overset{记\beta f为f_y} {=}f_y\frac {Y}{Z}+c_y \end{cases}\\ \quad \\ \Downarrow 写成矩阵形式如下(齐次坐标) \\ \quad \\\begin{pmatrix}u\\v\\1\end{pmatrix} = \frac{1}{Z} \begin{pmatrix}f_x&0&c_x \\0&f_x&c_y \\0&0&1 \end{pmatrix} \begin{pmatrix}X\\Y\\Z\end{pmatrix} \triangleq \frac {1}{Z}KP\\ \quad \\ \Downarrow 更经常的我们会这么写 \\ \quad \\Z\begin{pmatrix}u\\v\\1\end{pmatrix} = \color{red} \begin{pmatrix}f_x&0&c_x \\0&f_x&c_y \\0&0&1 \end{pmatrix}\color{blue} \begin{pmatrix}X\\Y\\Z\end{pmatrix} \triangleq \color{red} K\color{blue} P \color{b}\qquad\qquad (2) {u=αX+cx=带入式1αfZX+cx=affxfxZX+cxv=βY+cy=带入式1βfZY+cx=βffyfyZY+cy写成矩阵形式如下(齐次坐标) uv1 =Z1 fx000fx0cxcy1 XYZ Z1KP更经常的我们会这么写Z uv1 = fx000fx0cxcy1 XYZ KP(2)

  • 其中K就是我们常说的内参(矩阵)(Camera Intrinsics),P还是相机坐标系下的点,Z就是点的Z坐标的值。
  • 内参通常认为出厂后固定(通常不会在使用中发生变化),有时厂商提供,有时需要自己确定内参(这一过程也称作标定

1.2 外参推导

\quad 上边的坐标    P \;P P 都是在相机坐标系下进行的,而相机是运动的,所以实际中我们需要世界坐标系中的点    P w \;P_w Pw 来进行这个过程。即:世界坐标    P w \;P_w Pw 到相机坐标(也就是上式可用的    P \;P P )的变换。
\quad 这种: 变换上节介绍过,就是    P w ⟹ 经过旋转 R 和平移 T 转换到 P \;P_w \overset{经过旋转R和平移T} {\Longrightarrow} 转换到P Pw经过旋转R和平移T转换到P(相机坐标系) 的过程。如下:

R P w + t = P RP_w+t = P RPw+t=P
这其中求得    R \;R R    t \;t t就是相机的位姿,也是相机的外参(Camera Extrinsics),带入上式(2)有

Z P u v = Z [ u v 1 ] = K ( R P w + t ) = K T P w ⇓ 齐次坐标乘以系数表达相同含义,故 P u v = K T P w ZP_{uv} = Z\begin{bmatrix}u\\v\\1\end{bmatrix}=K(RP_w+t) = KTP_w \\ \Downarrow 齐次坐标乘以系数表达相同含义,故\\\quad \\P_{uv} = KTP_w ZPuv=Z uv1 =K(RPw+t)=KTPw齐次坐标乘以系数表达相同含义,故Puv=KTPw
注意 : 这里的 P w 不再是 [ X , Y , Z ] , 为了保证它和 K 相乘,它做一个归一化处理 , P w = [ X Z , Y Z , 1 ] \color{red}注意: 这里的P_w 不再是[X,Y,Z], 为了保证它和K相乘,它做一个归一化处理,P_w = [\frac {X}{Z},\frac {Y}{Z},1] 注意:这里的Pw不再是[X,Y,Z],为了保证它和K相乘,它做一个归一化处理,Pw=[ZX,ZY,1],这个点所在的平面也成为归一化平面,经过这样处理的点可以看成一个二维的其次坐标,位于 z = 1 z=1 z=1平面上,故称为归一化坐标。
\quad

下面对以上内容进行总结:

  • 相机内参就是 f x , f y , c x , c y f_x,f_y,c_x,c_y fx,fy,cx,cy,所以基本出厂就确定好了
  • 相机外参就是 R , t R,t R,t 即相机位姿,随运动时刻变化

图源视觉SLAM14讲


2. 畸变

2.1 径向畸变

\qquad 1. 透镜自身形状对光线传播的影响 ⟹ \Longrightarrow 径向畸变(分为桶形畸变和枕形畸变)
\qquad 2. 这种畸变是径向对称的
\qquad 3. 将点看做极坐标下的    [ r , θ ] \;[r,\theta] [r,θ] 的话,径向畸变是    r \;r r 发生了畸变    δ r \;\delta r δr

误差随着距离中心的距离而变化,可以利用这个特性纠正:
归一化平面上的点 [ x , y ] [x,y] [x,y] , 纠正完毕的点 [ x c , y c ] [x_c, y_c] [xc,yc], c c c 就是 c o r r e c t e d corrected corrected
{ x c = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y c = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{cases} x_c = x(1+k_1r^2 + k_2r^4 + k_3r^6)\\\quad\\ y_c = y(1+k_1r^2 + k_2r^4 + k_3r^6) \end{cases} xc=x(1+k1r2+k2r4+k3r6)yc=y(1+k1r2+k2r4+k3r6)
中心区域畸变小    k 1 \;k_1 k1 起作用,畸变较大的用    k 2 \;k_2 k2 起作用

2.2 切向畸变

\qquad 1. 组装过程中透镜和成像平面不完全平行 ⟹ \Longrightarrow 切向畸变
\qquad 3. 将点看做极坐标下的    [ r , θ ] \;[r,\theta] [r,θ] 的话,径向畸变是    θ \;\theta θ 发生了畸变    δ θ \;\delta \theta δθ

切向畸变纠正如下:
{ x c = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y c = x + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{cases} x_c = x+2p_1xy+p_2(r^2+2x^2)\\\quad\\ y_c = x+p_1(r^2+2y^2)+2p_2xy \end{cases} xc=x+2p1xy+p2(r2+2x2)yc=x+p1(r2+2y2)+2p2xy

合并径向和切向畸变:
{ x c = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y c = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ⇓ 归一化平面 ⇒ 像素平面 { u = f x ⋅ x c + c x v = f y ⋅ y c + c y \begin{cases} x_c = x(1+k_1r^2 + k_2r^4 + k_3r^6)+2p_1xy+p_2(r^2+2x^2)\\\quad\\ y_c = y(1+k_1r^2 + k_2r^4 + k_3r^6)+p_1(r^2+2y^2)+2p_2xy \end{cases}\\\quad\\\Downarrow 归一化平面\Rightarrow像素平面 \\\quad\\ \begin{cases} u = f_x\cdot x_c + c_x\\ v = f_y\cdot y_c + c_y \end{cases} xc=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)yc=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy归一化平面像素平面{u=fxxc+cxv=fyyc+cy
\quad 至此,用5个畸变项就完成了,实际中k甚至可以取一个。灵活搭配即可

3. 深度信息

\quad 上边的相机模型从光心到归一化平面连线上的所有点都可以投影到该像素(2式中的 Z Z Z值是齐次的)。因此只有确定了P的深度,才能知道位置信息。

3.1 算法测距

  1. 双目相机模型
    在这里插入图片描述 \quad 称为基线(Baseline),按照几何模型推导
    z − f z = b − u L + u R b \frac {z-f}{z}=\frac {b-u_L+u_R}{b} zzf=bbuL+uR
    \quad 整理, d d d 为视差:左右图横坐标之差
         z \qquad\quad\;\ z  z 就是深度信息:

z = f b d d = − u L + u R z=\frac {fb}{d}\qquad\qquad d=-u_L+u_R z=dfbd=uL+uR

  • 由上式可知:视差越大,距离越近,视差越小,距离远。
  • 两个相机越近(基线越小),距离越近,反之越近。

计算量大,计算量主要用于精准定位左右眼的匹配点。

3.2 物理测距

  1. RGB-D相机
  • 在RGB-D深度图中,记录了每个像素距离相机的距离(单位: m m mm mm),一般的量程在十几米范围左右。此外还有和普通相机一样的彩色图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音频转文字怎么操作?这几个好用的音频转文字方法分享给你

想象一下,你在公交车上听到了一个超搞笑的笑话,想要记下来和朋友分享,但是又怕自己记漏或者记错了关键的部分。这时候,音频转文字的软件就能帮上大忙了!你只需将录音导入到软件中,它就会像一位超级厉害的听…

4. Springboot快速回顾(@Mapper和@MapperScan)

springboot最重要的注解之一,因为有了Mapper注解,省去了在xml文件繁琐的配置 本文将对比介绍有无注解的区别,加深认识 目录 1 初次使用Mapper1.1 创建实体类Stu1.2 创建dao层接口1.3 创建service层接口和实现1.5 创建StuMapper.xml文件1.4 创…

岛屿数量 (力扣) dfs + bfs JAVA

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的…

【Linux】进程间通信 -- 命名管道 | mkfifo调用

小实验1.我们首先创建两个文件2.我们使用创建命名管道的命令mkfifo3.开始执行 在语言层面使用命名管道实现通信1.创建命名管道-函数mkfifo2.写入端代码3.读取端代码小细节&#xff1a; 小实验 1.我们首先创建两个文件 client.cpp: #include <iostream> using namespac…

《向量数据库指南》——什么是比较 Embedding?

目录 比较 Embedding 准备工作 示例 0:Marlon Brando 示例 1:国王与王后 示例 2:Apple,水果还是公司 欢迎回到向量数据库 101 系列教程。 之前的教程中,我们介绍了非结构化数据、向量数据库和 Milvus——全球最受欢迎的开源向量数据库。我们还简单介绍了 Embedding …

windows提权总结

文章目录 windows基础知识提权总结基础知识提权思路metasplit 提权反弹shell提权windows系统配置错误提权系统服务权限配置错误不带引号的服务路径提权注册键 AlwaysInstallElevated 本地dll劫持提权第三方提权sqlserver提权mysql提权MOF提权G6FTP提权 绕过UAC bypassuac远程终…

前端|HTML

参考视频&#xff1a;黑马程序员前端Html5教程&#xff0c;前端必备基础 目录 &#x1f4da;web标准 &#x1f4da;HTML认识 &#x1f407;HTML的概念 &#x1f407;开发工具 &#x1f407;HTML标签基础 ⭐️HTML骨架标签 ⭐️HTML元素标签分类 ⭐️HTML标签关系&#…

一款可源码交付的Java可视化建模规则引擎

规则引擎是一种根据规则中包含的指定过滤条件&#xff0c;判断其能否匹配运行时刻的实时条件来执行规则中所规定的动作的引擎。 规则引擎由推理引擎发展而来&#xff0c;是一种嵌入在应用程序中的组件&#xff0c;实现了将业务决策从应用程序代码中分离出来&#xff0c;并使用预…

FPGA纯verilog实现10G UDP协议栈,XGMII接口UltraScale GTY驱动,提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案SFPSGMII收发接口模块AXIS FIFOUDP协议栈UltraScale FPGAs Transceivers Wizard GTY 5、vivado工程6、上板调试验证并演示准备工作查看ARPUDP数据回环测试 7、福利&#xff1a;工程代码的获取 1、前言 目…

SpringBoot原理分析 | 安全框架:Security

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架&#xff1b;提供一组可以在Spring应用上下文中配置的Be…

使用作用域函数简化您的 Kotlin 代码:释放对象的力量

使用作用域函数简化您的 Kotlin 代码&#xff1a;释放对象的力量 欢迎&#xff0c;亲爱的 Kotlin 爱好者&#xff01;厌倦了在处理对象时反复书写相同的代码吗&#xff1f;别担心&#xff01;Kotlin 的作用域函数来拯救你&#xff0c;为你的编码之旅增添优雅的色彩。在这篇有趣…

华为认证 | 7月底这门HCIA认证即将发布!

华为认证HCIA-Cloud Service V3.5&#xff08;中文版&#xff09;预计将于2023年7月31日正式对外发布。 为了帮助您做好学习、培训和考试计划&#xff0c;现进行预发布通知&#xff0c;请您关注。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技…

小程序学习(三):小程序的宿主环境

1.什么是宿主环境 宿主环境指的是程序运行所必须的依赖环境。例如:Android系统和IOS系统是两个不同的宿主环境。安卓版的微信App是不能在IOS环境下运行的,所以Android是暗转软件的宿主环境,脱离宿主环境的软件是没有任何意义的! 2.小程序的宿主环境 小程序借助宿主环境提供的能…

(4)【轨迹优化篇】线性加权轨迹代价损失评分,轨迹多选一方法--DWA_planner、Open_Planner、lexicographic_planner

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言1、设计代价损失函数进行评分、线性加权法、迹评分轨迹多选一的轨迹优化设计思想&#xff08;1&#xff09;设计代价函数进行…

适用于企业级工作负载的混合闪存存储

NetApp FAS9500、FAS8700、FAS8300&#xff1a;适用于企业级工作负载的 FAS 拥有企业级应用程序和私有云的客户通常部署这些系统来作为架构基础。通过与主要超大规模云提供商的简单集成创建统一的混合云 借助 NetApp FAS 按需扩展性能 客户将这些平台描述为“重型”&#xff0…

2023年开源社执行委员会介绍

总起 开源社的各项工作主要分为内部事务、对外事务与专项工作三大类。整体而言&#xff0c;基础设施、财务、法律与成员发展等工作较为偏向于内部事务&#xff0c;而活动、媒体、社区合作、顾问委员会服务、国际接轨等工作偏向于对外联络与展现&#xff0c;而教育、公益、硬件、…

基于Tensorflow来重现GPT v1模型

OpenAI推出的ChatGPT模型让我们看到了通用人工智能的发展潜力&#xff0c;我也找了GPT的相关论文来进行研究。OpenAI在2017年的论文Improving Language Understanding by Generative Pre-Training提出了GPT的第一个版本&#xff0c;我也基于这个论文来用Tensorflow进行了复现。…

红外雨量计(光学雨量传感器)在监测降雨量的应用

红外雨量计&#xff08;光学雨量传感器&#xff09;在监测降雨量的应用 红外雨量计是一种基于红外光学原理的降雨量监测设备。它利用红外传感器检测雨滴落在传感器上时所产生的反射光信号&#xff0c;根据信号的强弱和持续时间计算出降雨强度和累计降雨量。 红外雨量计在监测降…

FITC Biotin(134759-22-1),5-FAM azide(510758-23-3),荧光素标记试剂的特点

Part1-----FITC-Biotin&#xff0c;134759-22-1 基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a; CAS号&#xff1a;134759-22-1 中文名&#xff1a;异硫氰酸荧光素标记生物素 英文名&#xff1a;FITC-Biotin&#xff0c;Fluorescein Biotin&#xff0c;…

vue element select下拉框树形多选

components 文件下新建 SelectTree文件 index.vue SelectTree index.vue <!--* 下拉树形选择 组件--> <template><el-select ref"select" style"min-width: 260px" :value"value" v-model"valueName" collapse-tags :…