slam第四讲(相机与图像)

一.相机模型

  • 相机几何模型:将三维空间中的点(单位为米)映射到二维图像平面(单位为像素)的过程。
  • 针孔模型针孔模型是常见且有效的模型。
  • 因为相机镜头透镜的存在,使得光线投影到成像平面过程中产生了畸变畸变。

1.针孔相机模型

 

 如上图所示,建立相机坐标系(O−xyz),图像物理坐标系(O′−x′y′z),图像像素坐标系(o−uv)

  • 相机坐标系\rightarrow图像物理坐标系

设三维空间中点 P在相机坐标系下的坐标为[X,Y,Z]^{T},其投影落在物理成像平面上,像点 P′在图像物理坐标系下的坐标为 [X',Y',Z']^{T},物理成像平面到小孔的距离为焦距 f(单位为米),根据三角形相似原理,得:

                                                                               \frac{Z}{f} = -\frac{X}{X'} = -\frac{Y}{Y'}

负号表示成的像是倒立的,这里将成像平面对称到相机前方(处理真实世界与相机投影的数学方法),以简化模型:

                                                                     \frac{Z}{f} = \frac{X}{X'} = \frac{Y}{Y'} {\Longrightarrow} \begin{cases} X' = f \frac{X}{Z} \\ Y' = f \frac{Y}{Z} \\ \end{cases}

  • 图像物理坐标系\rightarrow图像像素坐标系

像素坐标系与成像平面之间,相差了一个缩放与一个原点的平移。

像点 P′ 到图像像素坐标系(原点 o′位于图像的左上角,u 轴向右与 x轴平行,v轴向下与 y轴平行)下的点Puv ([u,v]T) 的变换关系为: 

                                                                            \begin{cases} u = \frac{X'}{dx} + c_{x} \\ v = \frac{Y'}{dy} + c_{y} \\ \end{cases}

dx,dy分别为图像上每一个像素点在 u轴、v轴方向上的物理尺寸(单位为米每像素); 
cx,cy分别为图像物理坐标系原点 O′在图像像素坐标系下在 u轴、v轴下的坐标(单位为像素)

  • 相机坐标系\rightarrow图像像素坐标系 

相机坐标系下的点 P到图像像素坐标系下的点 Puv的变换关系 : 

                                                                       \begin{cases} u = \frac{f}{dx} \frac{X}{Z} + c_{x} \\ v = \frac{f}{dy} \frac{Y}{Z} + c_{y} \\ \end{cases} 

\frac{f}{dx}, \frac{f}{dy}分别记为f_{x}, f_{y}(单位为像素),整理得到:

                                                          Z \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} X \\ Y \\ Z \\ \end{bmatrix} = \boldsymbol {KP}

P 为齐次坐标表示,矩阵 K为相机的内参Camera Intrinsics),相机内参在出厂之后是固定的,可以通过相机生产厂商获得内参,也可以自己通过标定标定方法获得。

注意:1.如果对相机采集到的图像做了变换,则内参矩阵也要相应进行变换。

           2.P是齐次坐标,所以改变Z时,P的投影点仍是同一个。若P的距离已知,则位置                可以确定。

  • 世界坐标系\rightarrow图像像素坐标系 

设点 P在世界坐标系下的坐标为 Pw( [Xw,Yw,Zw]T),世界坐标系到相机坐标系的变换矩阵为 T,则 Pw到 Puv的变换关系:

Z \boldsymbol {P}_{uv} = Z \begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix} = \boldsymbol {K}_{3 \times 3} (RP_{w}+t)=\boldsymbol {K}_{3 \times 3} T_{4\times 4}P_{w},T=\begin{bmatrix} \boldsymbol {R} & \boldsymbol {t} \\ \boldsymbol {0}^{T} & 1 \\ \end{bmatrix}

Puv,Pw 都为齐次坐标表示,相机的位姿 R,t 为相机的外参(Camera Extrinsics),外参会随着相机的运动而发生变化,同时也是 SLAM 中需要估计的目标,该参数表示相机的运动轨迹。

注意:上述变换隐含了一次非齐次到齐次的变换。

  • 归一化 

è¿éåå¾çæè¿°

P_{w}=\begin{bmatrix} X_{w}\\ Y_{w}\\ Z_{w}\\ 1 \end{bmatrix}

TP_{w}表示把一个世界坐标系下的齐次坐标变换到相机坐标系下,TP_{w}是一个4*1的矩阵,且最后一维为1,为了使其与K相乘,需要取TP_{w}的前三维组成向量,对于这个三维向量,我们可以按照齐次坐标的方式,把最后一维进行归一化处理,得到P在相机归一化平面上的投影:

                                               \boldsymbol {\widetilde{P}}_{c} = \begin{bmatrix}X \\Y\\ Z \\ \end{bmatrix}=(TP_{w})_{1:3}                                          \boldsymbol {P}_{c} = \begin{bmatrix} \frac{X}{Z} \\ \frac{Y}{Z} \\ 1 \\ \end{bmatrix}

此时Pc可以看成一个二维的齐次坐标,称为归一化坐标,它位于相机前方z=1的平面上,该平面为归一化平面。

由于Pc经过内参之后就得到了像素坐标,所以我们可以把像素坐标[u,v]^{T}看成对归一化平面上的点进行量化测量的结果。

  • 单目相机成像过程 
世界坐标\rightarrow相机坐标\rightarrow归一化平面\rightarrow像素坐标
P_{w}\begin{aligned} \widetilde {\boldsymbol {P}}_{c} &= [X, Y, Z]^{T} \\ &= \boldsymbol {R}_{cw} \boldsymbol {P}_{w} + \boldsymbol {t}_{cw} \end{aligned}\boldsymbol {P}_{c} =\left[ \begin{matrix} X/Z \\ Y/Z \\ 1 \end{matrix} \right]\boldsymbol {P}_{uv} = \boldsymbol {K} \boldsymbol {P}_{c}

2.畸变

  • 径向畸变
  • 原因:透镜形状影响光线的传播,导致光线在远离透镜中心的地方比靠近中心的地方更加弯曲。
  • 主要包含 桶形畸变 和 枕形畸变: 

                                      å¾åç¸å.jpg

桶形畸变:图像放大率随着离光轴的距离增加而减小。 
枕形畸变:图像放大率随着离光轴的距离减小而增加。

  • 该类畸变可以用和距中心距离有关的二次及高次多项式函数进行纠正: 

                                     \begin{cases} x_{corrected} = x(1 + k_{1}r^{2} + k_{2}r^{4} + k_{3}r^{6}) \\ y_{corrected} = y(1 + k_{1}r^{2} + k_{2}r^{4} + k_{3}r^{6}) \\ \end{cases}, \quad r = \sqrt{x^{2}+y^{2}}

式 中的 [x,y]T是未矫正的点的坐标, [xcorrected,ycorrected]T是矫正后的点的坐标,它们都是归一化平面上的点。k1,k2分别作用于畸变较小的中心区域,畸变较大的边缘区域,这两个系数适用于普通摄像头,而对于畸变很大的摄像头(比如鱼眼)可以加入 k3 。

  • 切向畸变
  • 原因:相机装配误差使得透镜和成像面不完全平行。

使用另外两个参数 p1,p2来进行矫正:

                                                \begin{cases} x_{corrected} = x + 2p_{1}xy + p_{2}(r^{2} + 2x^{2}) \\ y_{corrected} = y + 2p_{2}xy + p_{1}(r^{2} + 2y^{2}) \\ \end{cases}

  •  畸变校正
  • 视觉 SLAM 一般选择 先对整张图像进行去畸变,再去讨论此图像上的点的空间位置。
  • 步骤: 
  1. 将三维空间点投影到归一化图像平面,其归一化坐标为 [x,y]T 。
  2. 对归一化平面上的点进行径向畸变和切向畸变校正(这里使用 5 个畸变项):                                                                            \begin{cases} x_{corrected} = x(1 + k_{1}r^{2} + k_{2}r^{4} + k_{3}r^{6}) + 2p_{1}xy + p_{2}(r^{2} + 2x^{2})\\ y_{corrected} = y(1 + k_{1}r^{2} + k_{2}r^{4} + k_{3}r^{6}) + 2p_{2}xy + p_{1}(r^{2} + 2y^{2})\\ \end{cases}
  3. 将校正后的点变换到图像像素坐标系下,得到该点在图像上的正确位置:                                                                                                                         \begin{cases} u = f_{x} x_{corrected} + c_{x} \\ v = f_{y} y_{corrected} + c_{y} \\ \end{cases} 

3.双目相机模型

 单目无法确定点的准确空间位置,因为从相机光心到归一化平面连线上的所有点,都可以投影至该像素,只有当P的深度确定时,我们才能准确知道其空间位置。

è¿éåå¾çæè¿°

  • 双目类似人眼可以根据左右眼看到的景物差异(视差)来判断物体与我们的距离。
  • 计算视差 

è¿éåå¾çæè¿°

  • OL,OR —— 左右光圈中心; 
  • PL,PR —— 左、右眼关于三维空间中点 P 的像点; 
  • uL,uR—— 成像平面像点的坐标,这里 uR为负数; 
  • f —— 相机焦距; 
  • b —— 基线(Baseline); 
  • z —— 三维空间中点 P 的深度值。 

左右像素的几何关系(三角形 P−PL−PR相似于三角形 P−OL−OR): 

                                                                      \frac{z-f}{z} = \frac{b-u_{L} + u_{R}}{b}

整理得:

                                                                        z = \frac{fb}{d}, \quad d = u_{L} - u_{R}

d 为左右图的横坐标之差,称为 视差视差(Disparity)。由该式可知 

  • 视差越大,距离越近。
  • 基线越长,能测距离越远。
  • 计算深度公式很简洁,但视差计算比较困难,其计算量与精度都将成为问题。

4.RGB-D相机模型

è¿éåå¾çæè¿°

物理手段测量深度

  • 红外结构光(Structured Light):Kinect 1 代、Project Tango 1 代、Intel RealSense、Orbbec Astra 等。 工作原理:向探测目标发射红外结构光,相机根据返回的结构光图案,来计算物体离自身的距离。
  • 飞行时间法(Time-of-flight, TOF):Kinect 2 代、Tango 2 代 等。 工作原理:向探测目标发射脉冲光,根据发送到返回之间的光束飞行时间,来计算物体离自身的距离。

劣势:

  • 使用范围有限
  • 红外容易受到日光或其他传感器发射的红外光干扰
  • 透射材质因接受不到发射光,无法进行测量
  • 相机的成本、功耗较高

二.图像

表示:用一个0-255的整数(一个字节)来表示图像灰度的大小

//一张width=640,height=480的灰度图可以表示为:
unsigned char image[480][640]

横向为x轴,纵向为y轴,当你访问一个x,y处的像素,则在程序中的访问方式应该是:

unsigned char pixel=image[y][x]

彩色图像引入通道channel的概念,一个channel的数值是8位,一个彩色图像是3个channel,故一副彩色图像的每个像素都是24位。在opencv中,彩色图像channel的默认顺序为B,G,R,即我们得到一个24位的像素时,前8位表示蓝色数值,中间8位表示绿色,最后8位表示红色。

若还想表达图像的透明度,就使用R,G,B,A四个通道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值