前言
本博客为主要学习《视觉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轴平行。
内参的推导:
根据针孔相机的前投影模型得到三维点和成像平面上点的关系:
Zf=XX′=YY′⇒X′=fXZ,Y′=fYZ\frac{Z}{f}=\frac{X}{X'}=\frac{Y}{Y'}\Rightarrow X'=f\frac{X}{Z},Y'=f\frac{Y}{Z}fZ=X′X=Y′Y⇒X′=fZX,Y′=fZY
再从成像平面到像素坐标:
u=αX′+cx,v=βY′+cyu=\alpha X'+c_x,v=\beta Y'+c_yu=αX′+cx,v=βY′+cy
整理得到:
[uv1]=1Z[fx0cx0fycy001][XYZ]≜1ZKP\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⎦⎤=Z1⎣⎡fx000fy0cxcy1⎦⎤⎣⎡XYZ⎦⎤≜Z1KP
针孔模型总体流程:
1、世界坐标系下有一个点P,世界坐标为:PwP_wPw
2、相机的运动由R、t描述,将其转移到相机坐标系下为:Pˉc=RPw+t\bar P_c=RP_w+tPˉc=RPw+t
3、将相机坐标投影到归一化平面上,得到归一化相机坐标:Pc=[X/Z,Y/Z,1]P_c = [X/Z,Y/Z,1]Pc=[X/Z,Y/Z,1]
4、归一化坐标经过内参后对应到其像素坐标:Puv=KPcP_{uv}=KP_cPuv=KPc
1.2 相机畸变
为了获得更好的成像效果,会在相机前方安装滤镜。滤镜自身的形状对光纤传播产生影响,引起的畸变称为径向畸变,主要分为桶形畸变和枕型畸变;在机械组装过程中不能保证透镜和成像平面严格平行产生的时切向畸变。
对于归一化平面上一点p=[x,y]Tp=[x,y]^Tp=[x,y]T,也可以写成极坐标的形式[r,θ]T[r,\theta]^T[r,θ]T,假设畸变后点的坐标为[xdistorted,ydistorted][x_{distorted},y_{distorted}][xdistorted,ydistorted]。对于径向畸变有:
xdistorted=x(1+k1r2+k2r4+k3r6)x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)xdistorted=x(1+k1r2+k2r4+k3r6)
ydistorted=y(1+k1r2+k2r4+k3r6)y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6)ydistorted=y(1+k1r2+k2r4+k3r6)
对于切向畸变有:
xdistorted=x+2p1xy+p2(r2+2x2)x_{distorted}=x+2p_1xy+p_2(r^2+2x^2)xdistorted=x+2p1xy+p2(r2+2x2)
ydistorted=y+p1(r2+2y2)+2p2xyy_{distorted}=y+p_1(r^2+2y^2)+2p_2xyydistorted=y+p1(r2+2y2)+2p2xy
去畸变流程:对于每个归一化坐标(x,y)(x,y)(x,y),找到其在原始(畸变)图像上的坐标(xdistorted,ydistorted)(x_{distorted},y_{distorted})(xdistorted,ydistorted),然后将纠正后的点通过内参数投影到像素平面,得到该点在图像上的正确位置。
1.3 相机标定(张正友标定)
相机标定的主要目的是确定相机的内参K与畸变系数,在标定过程中也会求得相机的运动即外参。
这里主要介绍最常用的张氏标定,即棋盘格标定,其是介于传统标定方法和自标定方法之间的一种方法。注意张氏标定仅考虑了径向畸变而没有切向畸变。
1)求单应性矩阵H
设棋盘格中一点的三维世界坐标P=[X,Y,Z,1]TP=[X,Y,Z,1]^TP=[X,Y,Z,1]T,像素坐标为m=[u,v,1]Tm=[u,v,1]^Tm=[u,v,1]T,得棋盘格平面到图像平面的单应性关系为:
sm=K[R,T]Xsm=K[R,T]Xsm=K[R,T]X
令相机内参K为:[αγu00βv0001]\begin{bmatrix}\alpha & \gamma & u_0\\0 & \beta & v_0\\0&0&1 \end{bmatrix}⎣⎡α00γβ0u0v01⎦⎤
令棋盘格所在平面为Z=0平面,可得:
s[uv1]=K[r1r2r3t][XY01]=K[r1r2t][XY1]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}s⎣⎡uv1⎦⎤=K[r1r2r3t]⎣⎢⎢⎡XY01⎦⎥⎥⎤=K[r1r2t]⎣⎡XY1⎦⎤
[uv1]=1sK[r1r2t][XY1]≜H[XY1]\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]⎣⎡XY1⎦⎤≜H⎣⎡XY1⎦⎤
得到两个平面的单应性矩阵H=[h1,h2,h3]H=[h_1,h_2,h_3]H=[h1,h2,h3],其是一个齐次方程,有8个未知数,每对对应点提供两个方程,所以需要4对对应点可以算出世界平面到图像平面的单应性矩阵H。
2)求内参矩阵
由上述得
r1=sK−1h1,r2=sK−1h2r_1 = sK^{-1}h_1,r_2 = sK^{-1}h_2r1=sK−1h1,r2=sK−1h2
由于旋转矩阵正交性,可得:
r1Tr2=0,∣∣r1∣∣=∣∣r2∣∣=1r_1^Tr_2=0,||r_1||=||r_2||=1r1Tr2=0,∣∣r1∣∣=∣∣r2∣∣=1
代入有:
h1TK−TK−1h2=0,h1TK−TK−1h1=h2TK−TK−1h2h_1^TK^{-T}K^{-1}h_2=0,h_1^TK^{-T}K^{-1}h_1=h_2^TK^{-T}K^{-1}h_2h1TK−TK−1h2=0,h1TK−TK−1h1=h2TK−TK−1h2
每个单应性矩阵提供两个方程,而内参矩阵包含5个参数,至少需要3个单应性矩阵
3)计算外参矩阵
根据1sK[r1r2t]=H=[h1h2h3]\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−1h1∣∣=1∣∣K−1h2∣∣s=\frac{1}{||K^{-1}h_1||}=\frac{1}{||K^{-1}h_2||}s=∣∣K−1h1∣∣1=∣∣K−1h2∣∣1
r1=sK−1h1,r2=sK−1h2r_1 = sK^{-1}h_1,r_2 = sK^{-1}h_2r1=sK−1h1,r2=sK−1h2
r3=r1×r2r_3 = r_1\times r_2r3=r1×r2
t=sK−1h3t = sK^{-1}h_3t=sK−1h3
4)极大似然估计
上述推导了理论值,然而实际测量存在高斯噪声,因此需要使用最大似然估计进行优化,假设采集了n副棋盘格图像,每个棋盘格上检测到角点m个,其中第i副棋盘格上的角点Mj的像素投影点为:
m^(K,Ri,ti,Mij)=K[R∣t]Mij\hat m(K,R_i,t_i,M_{ij})=K[R|t]M_{ij}m^(K,Ri,ti,Mij)=K[R∣t]Mij
构造似然函数并使用LM算法迭代求解非线性最小二乘问题,并采用之前计算的理论值作为初值:
∑i=1n∑j=1m∣∣mij−m^(K,Ri,ti,Mij)∣∣2\sum^n_{i=1}\sum^m_{j=1} ||m_{ij}-\hat m(K,R_i,t_i,M_{ij})||^2i=1∑nj=1∑m∣∣mij−m^(K,Ri,ti,Mij)∣∣2
5)径向畸变估计
张氏标定只关注影响最大的径向畸变。根据之前的径向畸变方程:
udistorted=u+(u−u0)(k1r2+k2r4)u_{distorted}=u+(u-u_0)(k_1r^2+k_2r^4)udistorted=u+(u−u0)(k1r2+k2r4)
vdistorted=v+(v−v0)(k1r2+k2r4)v_{distorted}=v+(v-v_0)(k_1r^2+k_2r^4)vdistorted=v+(v−v0)(k1r2+k2r4)
化成矩阵形式:
[(u−u0)r2(u−u0)r4(v−v0)r2(v−v0)r4][k1k2]=[udistorted−uvdistorted−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}[(u−u0)r2(v−v0)r2(u−u0)r4(v−v0)r4][k1k2]=[udistorted−uvdistorted−v]
记为:Dk=d⇒k=(DTD)−1DTdDk=d\Rightarrow k=(D^TD)^{-1}D^TdDk=d⇒k=(DTD)−1DTd,然后再对最大似然估计进行优化。
1.4 全局快门(global shutter)和卷帘快门(rolling shutter)
全局快门是在同一时间进行曝光,其曝光时间短,会增加噪点;卷帘快门时通过传感器逐行扫描进行曝光,不同行像元的曝光时间不同,因此当曝光不当或物体移动较快时,会出现部分曝光(partial exposure)、斜坡图形(skew)、晃动(wobble) 等现象(称为果冻效应),但是可以达到更高的帧数和更低的噪声。
2、立体相机模型
2.1 双目相机模型
双目相机一般由两个水平放置的相机组成,可以将其看作针孔相机模型。两者的距离称为刷双目相机的基线。
假设空间点P在左右相机各成的像为PL、PRP_L、P_RPL、PR,理想情况下两者只在图像x轴上有差异,记左侧坐标为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_Rz=dfb,d=uL−uR
这里d为左右两图的横坐标之差,称为视差。由于视差最小为一个像素,双目深度存在一个理论上的最大值,由fbfbfb决定。
2.2 RGBD相机原理
这部分想详细了解推荐看博客 /electech6/article/details/78707839 和
/electech6/article/details/78349107
RGBD相机原理主要分为:
1、通过红外结构光(Structured Light)来测量像素距离,如Kinect1、Project Tango1、Intel Realsense等;
通过近红外激光器,将具有一定结构特征的光(比如离散光斑、条纹光、编码结构光等)投射到物体上,再由专门的红外摄像头进行采集。然后通过返回的结构光图案,计算物体与自身的距离。
2、通过飞行时间法(TOF)原理来测量像素距离,如Kinect2、TOF传感器等。
通过发射脉冲光到被观测物体上,然后接收从物体反射回去的脉冲光,通过发送到返回的光束飞行(往返)时间来计算被测物体离相机的距离。分为光脉冲调制和连续波调制。
2.3 双目相机与RGBD相机对比
(部分数据可能是前几年的技术水平,仅供参考,但局限性与基本趋势不会变)
如果觉得《视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比》对你有帮助,请点赞、收藏,并留下你的观点哦!