slam中的相机相关
相机模型
文章目录
- 相机模型
- 1. 基本成像原理
- 1.1 相机
- 1.1.1 相机简介
- 1.1.2 传感器
- 1.2 小孔成像原理
- 1.3 相机成像相关坐标系的建立
- 1.4 相机成像过程
- 2. 相机模型数学描述
- 2.1 世界坐标系到相机坐标系
- 2.2 相机坐标系到传感器坐标系
- 2.3 传感器坐标到像素坐标
- 2.4 最终的数学表达式
- 2.5 镜头畸变(radial-tangential畸变)
- 2.6 FOV (Field Of View)
- 2.6.1 计算方法
- 2.6.2 视场角将镜头分类
- 2.7 GSD (Ground Sample Distance)
- 2.7.1 自己计算GSD
- 3. 双目相机模型
- 4. 实际例子
1. 基本成像原理
1.1 相机
1.1.1 相机简介
1.1.2 传感器
传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。对于相机,采用的是图像传感器,是组成数字摄像头的重要组成部分可分为CCD(Charge Coupled Device,电荷耦合元件)、CMOS(Complementary Metal-Oxide Semiconductor,金属氧化物半导体元件)和CIS(Contact Image Sensor,接触式图像传感器)。
CCD是应用在摄影摄像方面的高端技术元件,CMOS则应用于较低影像品质的产品中,它的优点是制造成本较CCD更低,功耗也低得多,这也是市场很多采用USB接口的产品无须外接电源且价格便宜的原因。尽管在技术上有较大的不同,但CCD和CMOS两者性能差距不是很大,只是CMOS摄像头对光源的要求要高一些,但该问题已经基本得到解决。CCD元件的尺寸多为1/3英寸或者1/4英寸,在相同的分辨率下,宜选择元件尺寸较大的为好。图像传感器又叫感光元件。
1.2 小孔成像原理
中学时我们都学过小孔成像,还记得吧。像下面这个图,就是小孔成像示例。你看三维空间的蜡烛在带有小孔的黑箱子里成像一个倒立是像,这个是实像. 由于实像是倒立的,所以为了推导的方便,我们一般在数学公式推导的时候采用虚拟图像平面来进行推导,并且大多数的相机在输出图像的时候也会采用虚拟图像平面的坐标,方便使用.
1.3 相机成像相关坐标系的建立
机器人相关坐标系示意图
维度 | 含义 | |
---|---|---|
世界坐标系(world coordinate) | 3D,(X,Y,Z)T(X,Y,Z)^T(X,Y,Z)T单位为m | 世界坐标系可以由用户任意给定,表示在真实的3D物理世界中给定一个坐标系以描述物理世界中的3D点,世界坐标系通常以所感兴趣的物体object为中心建立(意味着所感兴趣的物体不同,建立的世界坐标系位置也不一样) |
相机坐标系(camera coordinate) | 3D,(x,y,z)T(x,y,z)^T(x,y,z)T单位为m | 相机坐标系由相机的位置唯一确定,一旦相机的光轴和光心确定后,相机坐标系的3个轴就给定了,它也是用来描述真是物理世界中的点在相机坐标系下的坐标 |
成像坐标系/感光器件坐标系(film coordinate) | 2D ,(x,y)T(x,y)^T(x,y)T 单位为mm | 成像坐标系由相机的成像平面唯一确定,表示将相机坐标系中的点(3D)投影到感光器件上成像得到2D坐标点 |
像素坐标系(pixel coordinate) | 2D ,(u,v)T(u,v)^T(u,v)T 单位为像素 | 进行图像处理算法时用到的图像所在的2D像素坐标系 |
1.4 相机成像过程
在将世界坐标系中的3D真实点转换到通常进行图像处理时所使用的以像素为单位的2D图像上,通常的前向投影过程如下:
- 通过外参矩阵(包括旋转矩阵RRR和平移矩阵TTT)将世界坐标系中的点转换到相机坐标系中
- 通过相机内参fff:相机的焦距(成像平面到光心的距离,在相机主轴上计算)参数,将相机坐标系中的点转换到成像坐标系上
- 利用成像坐标系上的坐标和单个像素的尺寸,获取成像点在图像中心坐标系中的像素坐标,之后再利用相机内参cx,cyc_x,c_ycx,cy把坐标原点从图像中心移动到图像左上角.
2. 相机模型数学描述
2.1 世界坐标系到相机坐标系
世界坐标系到相机坐标系的转换 3D空间点从世界坐标系到相机坐标系的变换本质上是一个三维旋转和平移变换的组合,因此可以描述为:
在变换前后,坐标的单位不会变化.
2.2 相机坐标系到传感器坐标系
从相机坐标系变换到传感器坐标系得到的是点在传感器平面上的二维坐标,可以利用相似三角形的几何关系得到:
在这一步中,利用相似三角形的关系,把相机坐标下的三维点,变换到了传感器平面上的一个点,坐标单位由m-> mm,因为物理焦距fff一般单位是毫米.
2.3 传感器坐标到像素坐标
从传感器坐标变换到像素坐标需要考虑把实际的长度换算成像素的个数.由于传感器长度和宽度不一定相等,图像一般也是一个矩形,所以可以假设:
{dx=WsensorWimagedy=HsensorHimage\begin{cases} dx = \frac{W_{sensor}}{W_{image}} \\ dy = \frac{H_{sensor}}{H_{image}} \end{cases} {dx=WimageWsensordy=HimageHsensor
单位为mm/pixelmm/pixelmm/pixel
另外由于传感器坐标系原点在其中心,所以在获取到像素坐标后还需要进行平移,使其坐标原点在左上角,于是:
{u=1dx⋅x+cxv=1dy⋅y+cy\begin{cases} u = \frac{1}{dx} \cdot x+ c_x \\ v = \frac{1}{dy} \cdot y + c_y \\ \end{cases} {u=dx1⋅x+cxv=dy1⋅y+cy
2.4 最终的数学表达式
Zc[uv1]=[00cx00cy001][1dx0001dy0001][f000f0001][XcYcZc]Z_c\begin{bmatrix} u \\v \\1 \end{bmatrix} = \begin{bmatrix} 0 & 0 & c_x \\ 0 & 0 & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \frac{1}{dx} & 0 &0 \\ 0 & \frac{1}{dy} &0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X_c \\Y_c\\Z_c \end{bmatrix} Zc⎣⎡uv1⎦⎤=⎣⎡000000cxcy1⎦⎤⎣⎡dx1000dy10001⎦⎤⎣⎡f000f0001⎦⎤⎣⎡XcYcZc⎦⎤
由于在实际使用中,常常不考虑传感器坐标系上的坐标,所以通常:
{fx=fdxfy=fdy\begin{cases} f_x = \frac{f}{dx} \\ f_y = \frac{f}{dy} \end{cases} {fx=dxffy=dyf
模型简化为:
Zc[uv1]=[fx0cx0fycy001][Rt01][XcYcZc]Z_c\begin{bmatrix} u \\v \\1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} R & t\\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_c \\Y_c\\Z_c \end{bmatrix} Zc⎣⎡uv1⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤[R0t1]⎣⎡XcYcZc⎦⎤
2.5 镜头畸变(radial-tangential畸变)
透镜的畸变主要分为径向畸变和切向畸变:
径向畸变:是由于透镜形状的制造工艺导致,且越向透镜边缘移动径向畸变越严重,实际情况中我们常用r=0处的泰勒级数展开的前几项来近似描述径向畸变,径向畸变后的归一化坐标为:
切向畸变: 是由于透镜和CMOS或者CCD的安装位置误差导致,切向畸变需要两个额外的畸变参数来描述,切向畸变后的归一化坐标为:
联合上式,整理得:
其中r2=x2+y2r^2=x^2+y^2r2=x2+y2.
2.6 FOV (Field Of View)
在摄影学中,视角(angle of view)是在一般环境中,相机可以接收影像的角度范围,也可以常被称为视野。 视角(angle of view)与成像范围(angle of coverage)是不同的,他是描述镜头可以撷取的影像角度,一般来说镜头的成像圈都够大到涵盖底片或者感光元件(或许会有一点点的边缘暗角)。假如镜头的成像范围无法涵盖整个感光元件,则成像圈会被看见,一般会伴随严重的边缘暗角,在这个状态下,视角会被成像范围所限制。
以镜头为顶点,以被测目标的物像可通过镜头的最大范围的两条边缘构成的夹角,称为视场角。
2.6.1 计算方法
三种, 对角线FOV ,垂直FOV, 水平FOV
有效焦距与影像格式尺寸计算视角 α=2arctan(d/2f)\alpha=2arctan(d/2f)α=2arctan(d/2f)。d表示底片(或Sensor)的水平距离,或者垂直距离,或对角线距离。
对于已知相机内参fx,fy,cx,cyf_x,f_y,c_x,c_yfx,fy,cx,cy来说,水平方向的FOV计算方法为α=2∗arcan(fx/2cx)\alpha = 2*arcan(f_x/2c_x)α=2∗arcan(fx/2cx)。在底片是36 x 24mm的情况下,不同的焦距对FOV的影响如下图所示。
2.6.2 视场角将镜头分类
标准镜头:视角45度左右,使用范围较广。
远摄镜头:视角40度以内,可在远距离情况下拍摄。
广角镜头:视角60度以上,观察范围较大,近处图像有变形
鱼眼镜头: 视角接近180°
2.7 GSD (Ground Sample Distance)
GSD是指从地面采集的每个样本的中心点之间的距离。既然我们讨论的是数码照片,每个样本都是一个像素。简单地说,GSD是地面上每个像素的大小。下面我们可以看到一个航拍图,它是用DJI Phantom 4 Pro或Phantom 4 RTK在离地30米(约100英尺)处拍摄的。如果我们一直放大,我们可以看到构成图像的各个像素。在这个例子中,每个像素代表现实世界中0.82cm的正方形。这是GSD。
2.7.1 自己计算GSD
当每个像素为方块像素时,即fx=fyf_x=f_yfx=fy,图片横向和纵向的gsd是一样的。其计算公式为:
GSD=h∗Wsfx∗WimgGSD=\frac{h*W_s}{f_x* W_{img}} GSD=fx∗Wimgh∗Ws
其中hhh表示飞行高度(目标点与光心的距离),WsW_sWs表示传感器宽度,WimgW_{img}Wimg表示图像宽度。对于像素的长宽比不一致的情况,即fx≠fyf_x \ne f_yfx=fy,则其两个方向的GSD值并不一样,此时:
GSDw=h∗Wsf∗Wimg=hfxGSDh=h∗Hsf∗Himg=hfyGSD_w=\frac{h*W_s}{f* W_{img}}=\frac{h}{f_x}\\ GSD_h=\frac{h*H_s}{f_* H_{img}}=\frac{h}{f_y} GSDw=f∗Wimgh∗Ws=fxhGSDh=f∗Himgh∗Hs=fyh
例如,让我们计算出Phantom 4 Pro在距地面80m处的地面采样距离。
我们从DJI的相机参数中了解以下内容:
图片宽度:5472px
图像高度:3078px
感应器宽度:13.2mm
感应器高度:8mm
焦距:8.8mm
因此,将值(以厘米为单位)替换为公式:
GSDh=8000∗0.80.88∗3078=2.19GSDw=8000∗1.320.88∗5472=2.36GSD_{h}=\frac{8000 * 0.8}{0.88 * 3078}=2.19\\ GSD_{w}=\frac{8000 * 1.32}{0.88 * 5472}=2.36 GSDh=0.88∗30788000∗0.8=2.19GSDw=0.88∗54728000∗1.32=2.36
可以发现其两个方向的GSD并不一致。这说明了其像素并不是正方形的吗?并不一定。传感器的宽高比为1.65,而图像的宽高比为1.777。因此可能是图片发生了剪裁。此时GSD应该怎么算呢?留作自己思考。
3. 双目相机模型
针孔相机模型描述了单个相机的成像模型。然而,仅根据一个像素,我们是无法确定这个空间点的具体位置的。这是因为,从相机光心到归一化平面连线上的所有点,都可以投影至该像素上。只有当 P 的深度确定时(比如通过双目或 RGBD 相机),我们才能确切地知道它的空间位置。
测量像素距离(或深度)的方式有很多种,像人眼就可以根据左右眼看到的景物差异(或称视差)来判断物体与我们的距离。双目相机的原理亦是如此。通过同步采集左右相机的图像,计算图像间视差,来估计每一个像素的深度。双目相机一般由左眼和右眼两个水平放置的相机组成。当然也可以做成上下两个目,但我们见到的主流双目都是做成左右的。在左右双目的相机中,我们可以把两个相机都看作针孔相机。它们是水平放置的,意味两个相机的光圈中心都位于 x 轴上。它们的距离称为双目相机的基线(Baseline, 记作 b),是双目的重要参数。
现在,考虑一个空间点 PPP ,它在左眼和右眼各成一像,记作$P_L $, PRP_RPR。由于相机基线的存在,这两个成像位置是不同的。理想情况下,由于左右相机只有在 xxx 轴上有位移,因此 PPP 的像也只在 xxx 上有差异,我们记它在左侧的坐标为 uLu_LuL ,右侧坐标为 uRu_RuR
z−fz=b−uL+uRb\frac{z-f}{z}=\frac{b-u_L+u_R}{b} zz−f=bb−uL+uR
稍加整理,得:
z=fbd,d=uL−uRz=\frac{fb}{d},d=u_L-u_R z=dfb,d=uL−uR
这里 ddd 为左右图的横坐标之差,称为视差(Disparity)。根据视差,我们可以估计一个像素离相机的距离。视差与距离成反比:视差越大,距离越近 。同时,由于视差最小为一个像素,于是双目的深度存在一个理论上的最大值,由$ f b $确定。我们看到,当基线越长时,双目最大能测到的距离就会变远;反之,小型双目器件则只能测量很近的距离。
4. 实际例子
slam中的相机相关相关推荐
- 视觉slam中的相机类型
作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 顾名思义,视觉 SLAM(又称 vSLAM)使用从相机和其他图像传感器采集的图像.视觉 S ...
- 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)
三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程) 一.显示运动轨迹原理讲解 二.前期准备 三.git管理子模块及克隆源代码 1.学习使用Git Submodule 2.克隆源 ...
- SLAM中相机位姿求解(李群李代数)
前言 slam中一个关键问题之一就是求解相机的位姿,人们找了很多以相机位姿为变量的误差函数,比如光度误差,重投影误差,3D几何误差等等,希望使得误差最小,进而求得比较准确的相机位姿.举一个重投影例子: ...
- SLAM中常用的相机模型及标定工具
最近一段时间准备作多传感器的SLAM研究,第一步是要解决传感器间的联合标定.所要开展实验的机器人平台配置了相机.单线雷达和IMU,自然而然地,首先是要先确定各个传感器的内参数,然后再确定传感器之间的外 ...
- OA-SLAM:在视觉SLAM中利用对象进行相机重新定位
作者 | 鱼肖浓 编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/587010197 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷 ...
- SLAM中的卡尔曼滤波:究竟滤了谁?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在SLAM系统中,后端优化部分有两大流派. 一派是基于马尔科夫性假 ...
- 重磅直播|慕尼黑工业大学博士详解室内SLAM中的几何约束
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微 ...
- SLAM中的marginalization 和 Schur complement
在视觉SLAM的很多论文中,会大量或者偶尔出现marginalization这个词(翻译为边缘化),有的论文是特地要用它,比如sliding window slam [2], okvis [3], d ...
- 通俗易懂!视觉slam第一部分——slam简介与相机介绍
首先是定义: SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感器的主体,在没有环 ...
最新文章
- sql安装错误解决办法
- python输入与输出165
- oracle12基本操作
- 11.条件语句if,switch
- 网络安全比赛理论答题(四)
- python具有可扩展的特性吗_1. 以下()不是python的特征 A 、 收费使用 B 、 跨平台 C 、 可拓展 D 、 可嵌入...
- rust(33)-Rust and WebAssembly(1)
- word2vec的通俗理解
- 帮你防沉迷、为你打call、解救路痴,一文看懂Google I/O 2018
- Unity shader入门之数据类型
- 计算机基础win7桌面操作,windows7基本操作方法(零基础的人教学)-win7教程
- 9.template -- basic concepts
- 算法笔记:Dinic最大流和SPFA费用流
- 第7章第37节:七图排版:一张背景六张拼合布局 [PowerPoint精美幻灯片实战教程]
- 惠普成长史:没有惠普,就没有蓬勃发展的硅谷
- ZStack基于华芯通打造ARM国产云平台 助力云上贵州多项应用
- java springboot智慧农业分销平台商用
- 国际期货和国内期货的区别带招商
- 用于科学计算机的计算器特点是什么,科学计算器有哪些功能
- STM32WB55使用————Zigbee信息收发