视觉SLAM十四讲第五讲

第五章 相机与图像

主要目标

  1. 理解针孔相机的模型、内参与径向畸变参数。
  2. 理解一个空间点是如何投影到相机成像平面的。
  3. 掌握 OpenCV 的图像存储与表达方式。
  4. 学会基本的摄像头标定方法。
    在计算机中,一张照片由很多个像素组成,每个像素记录了色彩或亮度的信息。三维世界中的一个物体反射或发出的光线,穿过相机光心后,投影在相机的成像平面上。相机的感光器件接收到光线后,产生测量值,就得到了像素,形成了我们见到的照片。
    一、相机模型
    1)针孔相机模型
    视觉SLAM十四讲第五讲_第1张图片
    设 O-x-y-z 为相机坐标系,习惯上我们让z 轴指向相机前方,x 向右,y 向下(此图我们应该站在左侧看右侧)。O 为摄像机的光心,也是针孔模型中的针孔。现实世界的空间点 P,经过小孔 O 投影之后,落在物理成像平面 O′ - x′ -y′ 上,成像点为 P′。设 P 的坐标为 [X, Y, Z]T,P′ 为 [X′, Y ′, Z′]T,并且设物理成像平面到小孔的距离为f(焦距)。那么,根据三角形相似关系,有:
    在这里插入图片描述
    其中负号表示成的像是倒立的。不过,实际相机得到的图像并不是倒像(否则相机的使用会非常不方便)。为了让模型更符合实际,我们可以等价地把成像平面对称地放到相机前方,和三维空间点一起放在摄像机坐标系的同一侧,这样做可以把公式中的负号去掉,使式子更加简洁:
    视觉SLAM十四讲第五讲_第2张图片
    把 X′, Y ′ 放到等式左侧,整理得:
    视觉SLAM十四讲第五讲_第3张图片
    为了描述传感器将感受到的光线转换成图像像素的过程,我们设在物理成像平面上固定着一个像素平面 o-u-v。我们在像素平面得到了 P′ 的像素坐标:[u, v]T。
    像素坐标系通常的定义方式是:原点 o′ 位于图像的左上角,u 轴向右与 x 轴平行,v 轴向下与 y 轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移。我们设像素坐标在u 轴上缩放了 α 倍,在 v 上缩放了 β 倍。同时,原点平移了 [cx, cy]T。那么,P′ 的坐标与像素坐标[u, v]T 的关系为:
    视觉SLAM十四讲第五讲_第4张图片
    把 αf 合并成 fx,把 βf 合并成 fy,得:
    在这里插入图片描述
    其中,f 的单位为米,α, β 的单位为像素/米,所以 fx, fy 和 cx, cy 的单位为像素。
    视觉SLAM十四讲第五讲_第5张图片
    我们把中间的量组成的矩阵称为相机的内参数矩阵(Camera Intrinsics)K。通常认为,相机的内参在出厂之后是固定的,不会在使用过程中发生变化。
    由于相机在运动,所以 P 的相机坐标应该是它的世界坐标(记为 Pw)根据相机的当前位姿变换到相机坐标系下的结果。相机的位姿由它的旋转矩阵 R 和平移向量 t 来描述。那么有:
    视觉SLAM十四讲第五讲_第6张图片
    它描述了 P 的世界坐标到像素坐标的投影关系。其中,相机的位姿 R, t 又称为相机的外参数(Camera Extrinsics)。相比于不变的内参,外参会随着相机运动发生改变,同时也是 SLAM 中待估计的目标,代表着机器人的轨迹。
    我们可以把一个世界坐标点先转换到相机坐标系,再除掉它最后一维的数值(即该点距离相机成像平面的深度),这相当于把最后一维进行归一化处理,得到点 P 在相机归一化平面上的投影:
    在这里插入图片描述
    归一化坐标可看成相机前方z = 1 处的平面上的一个点,这个 z = 1 平面也称为归一化平面。归一化坐标再左乘内参就得到了像素坐标,所以我们可以把像素坐标 [u, v]T 看成对归一化平面上的点进行量化测量的结果。
    2)畸变
    由透镜形状引起的畸变(Distortion,也叫失真)称为径向畸变。它们主要分为两大类:桶形畸变和枕形畸变。
    除了透镜的形状会引入径向畸变外,在相机的组装过程中由于不能使透镜和成像面严格平行也会引入切向畸变。
    3)单目相机成像过程
    1.首先,世界坐标系下有一个固定的点 P,世界坐标为 Pw。
    2.由于相机在运动,它的运动由 R, t 或变换矩阵 T ∈ SE(3) 描述。P 的相机坐标为 P˜c =RPw + t。
    3.这时的 P˜c 的分量为 X, Y, Z,把它们投影到归一化平面 Z = 1 上,得到 P 的归一化坐标:Pc = [X/Z, Y /Z, 1]T。
    4.有畸变时,根据畸变参数计算 Pc 发生畸变后的坐标。
    5.最后,P 的归一化坐标经过内参后,对应到它的像素坐标:Puv = KPc。
    4)双目相机模型
    通过同步采集左右相机的图像,计算图像间视差,来估计每一个像素的深度。
    双目相机一般由左眼相机和右眼相机两个水平放置的相机组成。它们是水平放置的,意味着两个相机的光圈中心都位于 x 轴上。两者之间的距离称为双目相机的基线(Baseline,记作 b),是双目相机的重要参数。
    视觉SLAM十四讲第五讲_第7张图片
    现在,考虑一个空间点 P,它在左眼相机和右眼相机各成一像,记作 PL, PR。由于相机基线的存在,这两个成像位置是不同的。理想情况下,由于左右相机只在 x 轴上有位移,因此 P 的像也只
    在 x 轴(对应图像的 u 轴)上有差异。记它的左侧坐标为 uL,右侧坐标为 uR,根据 △P PLPR 和 △P OLOR 的相似关系,有:
    在这里插入图片描述
    稍加整理,得:
    在这里插入图片描述
    其中 d 定义为左右图的横坐标之差,称为视差(Disparity)。根据视差,我们可以估计一个像素与相机之间的距离。视差与距离成反比:视差越大,距离越近。
    5)RGB-D 相机模型
    目前的 RGB-D 相机按原理可分为两大类:
    1.通过红外结构光(Structured Light)来测量像素距离的。例子有 Kinect 1 代、Project Tango 1代、Intel RealSense 等。
    2 通过飞行时间法(Time-of-flight,ToF)原理测量像素距离的。例子有 Kinect 2 代和一些现有的 ToF 传感器等。
    RGB-D 相机能够实时地测量每个像素点的距离。但是,由于这种发射 − 接收的测量方式,其使用范围比较受限。用红外光进行深度值测量的 RGB-D 相机,容易受到日光或其他传感器发射的红外光干扰,因此不能在室外使用。在没有调制的情况下,同时使用多个 RGB-D 相机时也会相互干扰。对于透射材质的物体,因为接收不到反射光,所以无法测量这些点的位置。此外,RGB-D 相机在成本、功耗方面,都有一些劣势。
    二、图像
    在一张灰度图中,每个像素位置 (x, y) 对应一个灰度值 I,所以,一张宽度为 w、高度为 h 的图像,数学上可以记为一个函数:
    在这里插入图片描述
    其中 (x, y) 是像素的坐标。然而,计算机并不能表达实数空间,所以我们需要对下标和图像读数在某个范围内进行量化。
    视觉SLAM十四讲第五讲_第8张图片
    三、实践:计算机中的图像
    1)OpenCV 的基础使用方法
    从 http://opencv.org/downloads.html 下载,选择 OpenCV for Linux 版本即可。获得压缩包。将它解压到任意目录下,可以发现 OpenCV 亦是一个 cmake 工程。
    安装依赖项
    sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
    随后的编译安装和普通的 cmake 工程一样,请在 make 之后,调用 sudo make install 将 OpenCV安装到你的机器上(而不是仅仅编译它)。
    参考:https://www.cnblogs.com/Shuqing-cxw/p/9195303.html

你可能感兴趣的:(SLAM,计算机视觉)