视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比

前言

本博客为主要学习《视觉SLAM十四讲》第5讲、《机器人学的状态估计》第6章6.4.1透视相机、《多视图几何》第5章摄像头模型等SLAM内容的总结与整理。
主要包括:
1、针孔相机模型、相机畸变、相机标定
2、双目相机模型、RGBD相机原理
2、双目相机与RGBD相机对比

1、单目相机模型

1.1 针孔相机模型

在这里插入图片描述
主要包括四种坐标:世界坐标、相机坐标、归一化相机坐标和像素坐标。
其中O-x-y-z为相机坐标系,O为相机的光心,一般z轴指向相机前方,x轴向右,y轴向下;当z=1时称为归一化平面;像素坐标系定义为:原点O‘位于图像左上角,u轴向右与x轴平行,v轴向下与y轴平行。

内参的推导:
根据针孔相机的前投影模型得到三维点和成像平面上点的关系:

Z f = X X ′ = Y Y ′ ⇒ X ′ = f X Z , Y ′ = f Y Z \frac{Z}{f}=\frac{X}{X'}=\frac{Y}{Y'}\Rightarrow X'=f\frac{X}{Z},Y'=f\frac{Y}{Z} fZ=XX=YYX=fZXY=fZY

再从成像平面到像素坐标:

u = α X ′ + c x , v = β Y ′ + c y u=\alpha X'+c_x,v=\beta Y'+c_y u=αX+cxv=βY+cy

整理得到:

[ u v 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] ≜ 1 Z K P \begin{bmatrix}u\\v\\1 \end{bmatrix}=\frac{1}{Z}\begin{bmatrix}fx&0&c_x\\0&fy&c_y\\0&0&1 \end{bmatrix}\begin{bmatrix}X\\Y\\Z \end{bmatrix} \triangleq \frac{1}{Z}KP uv1=Z1fx000fy0cxcy1XYZZ1KP

针孔模型总体流程:

1、世界坐标系下有一个点P,世界坐标为: P w P_w Pw

2、相机的运动由R、t描述,将其转移到相机坐标系下为: P ˉ c = R P w + t \bar P_c=RP_w+t Pˉc=RPw+t

3、将相机坐标投影到归一化平面上,得到归一化相机坐标: P c = [ X / Z , Y / Z , 1 ] P_c = [X/Z,Y/Z,1] Pc=[X/Z,Y/Z,1]

4、归一化坐标经过内参后对应到其像素坐标: P u v = K P c P_{uv}=KP_c Puv=KPc

1.2 相机畸变

为了获得更好的成像效果,会在相机前方安装滤镜。滤镜自身的形状对光纤传播产生影响,引起的畸变称为径向畸变,主要分为桶形畸变和枕型畸变;在机械组装过程中不能保证透镜和成像平面严格平行产生的时切向畸变。

对于归一化平面上一点 p = [ x , y ] T p=[x,y]^T p=[x,y]T,也可以写成极坐标的形式 [ r , θ ] T [r,\theta]^T [r,θ]T,假设畸变后点的坐标为 [ x d i s t o r t e d , y d i s t o r t e d ] [x_{distorted},y_{distorted}] [xdistorted,ydistorted]。对于径向畸变有:
x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6) xdistorted=x(1+k1r2+k2r4+k3r6)

y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6) ydistorted=y(1+k1r2+k2r4+k3r6)

对于切向畸变有:

x d i s t o r t e d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) x_{distorted}=x+2p_1xy+p_2(r^2+2x^2) xdistorted=x+2p1xy+p2(r2+2x2)

y d i s t o r t e d = y + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y y_{distorted}=y+p_1(r^2+2y^2)+2p_2xy ydistorted=y+p1(r2+2y2)+2p2xy

去畸变流程:对于每个归一化坐标 ( x , y ) (x,y) (x,y),找到其在原始(畸变)图像上的坐标 ( x d i s t o r t e d , y d i s t o r t e d ) (x_{distorted},y_{distorted}) (xdistorted,ydistorted),然后将纠正后的点通过内参数投影到像素平面,得到该点在图像上的正确位置。

1.3 相机标定(张正友标定)

相机标定的主要目的是确定相机的内参K与畸变系数,在标定过程中也会求得相机的运动即外参。

这里主要介绍最常用的张氏标定,即棋盘格标定,其是介于传统标定方法和自标定方法之间的一种方法。注意张氏标定仅考虑了径向畸变而没有切向畸变。

1)求单应性矩阵H
设棋盘格中一点的三维世界坐标 P = [ X , Y , Z , 1 ] T P=[X,Y,Z,1]^T P=[X,Y,Z,1]T,像素坐标为 m = [ u , v , 1 ] T m=[u,v,1]^T m=[u,v,1]T,得棋盘格平面到图像平面的单应性关系为:
s m = K [ R , T ] X sm=K[R,T]X sm=K[R,T]X

令相机内参K为: [ α γ u 0 0 β v 0 0 0 1 ] \begin{bmatrix}\alpha & \gamma & u_0\\0 & \beta & v_0\\0&0&1 \end{bmatrix} α00γβ0u0v01

令棋盘格所在平面为Z=0平面,可得:
s [ u v 1 ] = K [ r 1 r 2 r 3 t ] [ X Y 0 1 ] = K [ r 1 r 2 t ] [ X Y 1 ] s\begin{bmatrix}u\\v\\1 \end{bmatrix}=K\begin{bmatrix}r_1 & r_2 & r_3 &t \end{bmatrix}\begin{bmatrix}X\\Y\\0\\1 \end{bmatrix}=K\begin{bmatrix}r_1 & r_2 &t \end{bmatrix}\begin{bmatrix}X\\Y\\1 \end{bmatrix} suv1=K[r1r2r3t]XY01=K[r1r2t]XY1

[ u v 1 ] = 1 s K [ r 1 r 2 t ] [ X Y 1 ] ≜ H [ X Y 1 ] \begin{bmatrix}u\\v\\1 \end{bmatrix}=\frac{1}{s} K\begin{bmatrix}r_1 & r_2 &t \end{bmatrix}\begin{bmatrix}X\\Y\\1 \end{bmatrix} \triangleq H\begin{bmatrix}X\\Y\\1 \end{bmatrix} uv1=s1K[r1r2t]XY1HXY1

得到两个平面的单应性矩阵 H = [ h 1 , h 2 , h 3 ] H=[h_1,h_2,h_3] H=[h1,h2,h3],其是一个齐次方程,有8个未知数,每对对应点提供两个方程,所以需要4对对应点可以算出世界平面到图像平面的单应性矩阵H。

2)求内参矩阵
由上述得
r 1 = s K − 1 h 1 , r 2 = s K − 1 h 2 r_1 = sK^{-1}h_1,r_2 = sK^{-1}h_2 r1=sK1h1r2=sK1h2
由于旋转矩阵正交性,可得:
r 1 T r 2 = 0 , ∣ ∣ r 1 ∣ ∣ = ∣ ∣ r 2 ∣ ∣ = 1 r_1^Tr_2=0,||r_1||=||r_2||=1 r1Tr2=0r1=r2=1

代入有:
h 1 T K − T K − 1 h 2 = 0 , h 1 T K − T K − 1 h 1 = h 2 T K − T K − 1 h 2 h_1^TK^{-T}K^{-1}h_2=0,h_1^TK^{-T}K^{-1}h_1=h_2^TK^{-T}K^{-1}h_2 h1TKTK1h2=0h1TKTK1h1=h2TKTK1h2

每个单应性矩阵提供两个方程,而内参矩阵包含5个参数,至少需要3个单应性矩阵

3)计算外参矩阵
根据 1 s K [ r 1 r 2 t ] = H = [ h 1 h 2 h 3 ] \frac{1}{s} K\begin{bmatrix}r_1 & r_2 &t \end{bmatrix}= H = \begin{bmatrix}h_1 &h_2 &h_3\end{bmatrix} s1K[r1r2t]=H=[h1h2h3],我们已经得到了H和K,可得:

s = 1 ∣ ∣ K − 1 h 1 ∣ ∣ = 1 ∣ ∣ K − 1 h 2 ∣ ∣ s=\frac{1}{||K^{-1}h_1||}=\frac{1}{||K^{-1}h_2||} s=K1h11=K1h21

r 1 = s K − 1 h 1 , r 2 = s K − 1 h 2 r_1 = sK^{-1}h_1,r_2 = sK^{-1}h_2 r1=sK1h1r2=sK1h2

r 3 = r 1 × r 2 r_3 = r_1\times r_2 r3=r1×r2

t = s K − 1 h 3 t = sK^{-1}h_3 t=sK1h3

4)极大似然估计
上述推导了理论值,然而实际测量存在高斯噪声,因此需要使用最大似然估计进行优化,假设采集了n副棋盘格图像,每个棋盘格上检测到角点m个,其中第i副棋盘格上的角点Mj的像素投影点为:
m ^ ( K , R i , t i , M i j ) = K [ R ∣ t ] M i j \hat m(K,R_i,t_i,M_{ij})=K[R|t]M_{ij} m^(K,Ri,ti,Mij)=K[Rt]Mij

构造似然函数并使用LM算法迭代求解非线性最小二乘问题,并采用之前计算的理论值作为初值:
∑ i = 1 n ∑ j = 1 m ∣ ∣ m i j − m ^ ( K , R i , t i , M i j ) ∣ ∣ 2 \sum^n_{i=1}\sum^m_{j=1} ||m_{ij}-\hat m(K,R_i,t_i,M_{ij})||^2 i=1nj=1mmijm^(K,Ri,ti,Mij)2

5)径向畸变估计
张氏标定只关注影响最大的径向畸变。根据之前的径向畸变方程:
u d i s t o r t e d = u + ( u − u 0 ) ( k 1 r 2 + k 2 r 4 ) u_{distorted}=u+(u-u_0)(k_1r^2+k_2r^4) udistorted=u+(uu0)(k1r2+k2r4)

v d i s t o r t e d = v + ( v − v 0 ) ( k 1 r 2 + k 2 r 4 ) v_{distorted}=v+(v-v_0)(k_1r^2+k_2r^4) vdistorted=v+(vv0)(k1r2+k2r4)

化成矩阵形式:
[ ( u − u 0 ) r 2 ( u − u 0 ) r 4 ( v − v 0 ) r 2 ( v − v 0 ) r 4 ] [ k 1 k 2 ] = [ u d i s t o r t e d − u v d i s t o r t e d − v ] \begin{bmatrix}(u-u_0)r^2 &(u-u_0)r^4\\(v-v_0)r^2&(v-v_0)r^4 \end{bmatrix}\begin{bmatrix}k_1\\k_2 \end{bmatrix}=\begin{bmatrix}u_{distorted}-u\\v_{distorted}-v \end{bmatrix} [(uu0)r2(vv0)r2(uu0)r4(vv0)r4][k1k2]=[udistorteduvdistortedv]

记为: D k = d ⇒ k = ( D T D ) − 1 D T d Dk=d\Rightarrow k=(D^TD)^{-1}D^Td Dk=dk=(DTD)1DTd,然后再对最大似然估计进行优化。

1.4 全局快门(global shutter)和卷帘快门(rolling shutter)

全局快门是在同一时间进行曝光,其曝光时间短,会增加噪点;卷帘快门时通过传感器逐行扫描进行曝光,不同行像元的曝光时间不同,因此当曝光不当或物体移动较快时,会出现部分曝光(partial exposure)、斜坡图形(skew)、晃动(wobble) 等现象(称为果冻效应),但是可以达到更高的帧数和更低的噪声。


2、立体相机模型

2.1 双目相机模型

双目相机一般由两个水平放置的相机组成,可以将其看作针孔相机模型。两者的距离称为刷双目相机的基线。

假设空间点P在左右相机各成的像为 P L 、 P R P_L、P_R PLPR,理想情况下两者只在图像x轴上有差异,记左侧坐标为 u L u_L uL,右侧坐标为 u R u_R uR,根据三角形相似关系有:
z − f z = b − u L + u R b \frac{z-f}{z}=\frac{b-u_L+u_R}{b} zzf=bbuL+uR

可得:
z = f b d , d = u L − u R z=\frac{fb}{d},d=u_L-u_R z=dfbd=uLuR

这里d为左右两图的横坐标之差,称为视差。由于视差最小为一个像素,双目深度存在一个理论上的最大值,由 f b fb fb决定。
在这里插入图片描述

2.2 RGBD相机原理

这部分想详细了解推荐看博客 https://blog.csdn.net/electech6/article/details/78707839
https://blog.csdn.net/electech6/article/details/78349107

RGBD相机原理主要分为:
1、通过红外结构光(Structured Light)来测量像素距离,如Kinect1、Project Tango1、Intel Realsense等;
通过近红外激光器,将具有一定结构特征的光(比如离散光斑、条纹光、编码结构光等)投射到物体上,再由专门的红外摄像头进行采集。然后通过返回的结构光图案,计算物体与自身的距离。

2、通过飞行时间法(TOF)原理来测量像素距离,如Kinect2、TOF传感器等。
通过发射脉冲光到被观测物体上,然后接收从物体反射回去的脉冲光,通过发送到返回的光束飞行(往返)时间来计算被测物体离相机的距离。分为光脉冲调制和连续波调制。

2.3 双目相机与RGBD相机对比

(部分数据可能是前几年的技术水平,仅供参考,但局限性与基本趋势不会变)

相机TOF结构光双目
测距方式主动式主动式被动式
工作原理根据红外(IR)光飞行时间直接测量主动投影已知编码图案图像特征点匹配,三角测量间接计算
帧率较高,可达上百FPS30fps从高到低都有(一般较低)
分辨率低于640X480可达1080X720可达2K
测量精度最高里厘米近距离可达0.01-1mm近距离可达毫米级
测量范围可测量较远距离一般10m以内由于基线限制,只能测量较近距离
强光环境良好
低光环境良好良好
影响因素不受光照变化和物体纹理影响,受多重反射影响容易受光照影响,难以用于室外受光照变化和物理纹理影响很大,夜晚无法使用
硬件成本
软件复杂度
功耗很高,需全面照射中,只需照射局部区域
SLAM(Simultaneous Localization and Mapping)是一种同时进行定位和地图构建的技术,常用于机器人、自动驾驶等领域。相机标定SLAM中的一个重要步骤,用于确定相机的内部参数和外部参数,以便准确地进行图像处理和三维重建。 常用的相机标定模型有以下几种: 1. Pinhole模型:也称为针孔相机模型,是最简单的相机模型。它假设线通过针孔投射到成像平面上,忽略了透镜的复杂学效应。该模型使用焦距、主点和畸变系数来描述相机的内部参数。 2. 等距模型(Equidistant Model):该模型考虑了径向畸变,适用于具有较大畸变的相机。它使用四个径向畸变系数来描述相机的畸变情况。 3. 等角模型(Equisolid Model):该模型也考虑了径向畸变,适用于具有较小畸变的相机。它使用四个径向畸变系数来描述相机的畸变情况。 4. Brown模型:该模型是一种更通用的相机模型,可以同时考虑径向和切向畸变。它使用五个径向畸变系数和两个切向畸变系数来描述相机的畸变情况。 5. Fisheye模型:该模型适用于鱼眼镜头等具有大视场角的相机。它使用多项式函数来描述相机的畸变情况。 以上是常用的几种相机标定模型,不同模型适用于不同类型的相机和畸变情况。在SLAM中,选择适合相机的标定模型非常重要,以确保定位和地图构建的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值