相机模型:单目、双目、深度相机模型及相机畸变

针孔模型

坐标系

首先定义名词:

  • 光轴:各坐标系的Z轴方向
  • 光心:光轴的中心点
  • 主点:光轴同图像平面的交点
  • 焦距:光心到图像平面的距离

相机通常存在四个相关的坐标系:世界坐标系、相机坐标系、像素坐标系、图像坐标系。

为方便数学表达,通常以相机光心为原点,构建坐标系:

在这里插入图片描述

世界坐标系

世界坐标系(world coordinate),也称测量坐标系,用于描述三维空间中刚体的空间位置及姿态。

世界坐标系的位置可以根据实际情况自由确定,记为 O w − X w Y w Z w O_w-X_wY_wZ_w OwXwYwZw,坐标系单位为米(m)。

相机坐标系

相机坐标系(camera coordinate),以相机光心为原点,相机光轴为Z轴方向,构建的三维直角坐标系。

相机坐标系同像平面垂直,记为 O c − X c Y c Z c O_c-X_cY_cZ_c OcXcYcZc,坐标系单位为米(m)

像素坐标系

像素坐标系(pixel coordinate),以图像左上角为像素原点,构建的二维直角坐标系。坐标系的两轴 u u u轴同图像的宽平齐, v v v轴同图像的高平齐。

像素坐标系记为 O p − u v O_p-uv Opuv,坐标系的单位为像素(pixel)

图像坐标系

图像坐标系(image coordinate),以图像的中心点(相机光轴同图像的交点位置,主点)为原点构建的二维直角坐标系,坐标系的两轴 x x x同像素坐标系的 u u u平行, y y y v v v平行。

像素坐标系不利于坐标变换,故而将像素坐标系平移至主点构建图像坐标系,记作 O i − x y O_i-xy Oixy,坐标系的单位为毫米(mm)。

小孔成像模型

相机的成像满足小孔成像模型,真实成像平面为倒像。然而在实际的相机中,得到的图像为正像,为使模型符合实际,将成像平面对称放置在相机前方,同世界坐标系、相机坐标系同侧放置:

在这里插入图片描述

由此,得到实际的相机模型如下:
在这里插入图片描述

坐标变换

世界坐标系到相机坐标系

已知某点在世界坐标系内坐标 W p {}^Wp Wp坐标为 [ X w Y w Z w ] T \begin{bmatrix}X_w&Y_w&Z_w\end{bmatrix}^T [XwYwZw]T,其在相机坐标系内坐标为 c p = [ X c Y c Z c ] T {}^cp=\begin{bmatrix}X_c&Y_c&Z_c\end{bmatrix}^T cp=[XcYcZc]T

在这里插入图片描述

则可通过变换矩阵得到两者间关系:
[ X c Y c Z c 1 ] = T ⋅ [ X w Y w Z w 1 ] = [ R t 0 T 1 ] [ X w Y w Z w 1 ] \begin{bmatrix}X_c\\Y_c\\Z_c\\1\end{bmatrix}=T\cdot\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} XcYcZc1=TXwYwZw1=[R0Tt1]XwYwZw1

相机坐标系到图像坐标系

已知相机坐标系内坐标 c p = [ X c Y c Z c ] T {}^cp=\begin{bmatrix}X_c&Y_c&Z_c\end{bmatrix}^T cp=[XcYcZc]T,对应在图像坐标系上的坐标点为 i p = [ x y ] T {}^ip=\begin{bmatrix}x&y\end{bmatrix}^T ip=[xy]T

在这里插入图片描述

已知,相机坐标系到图像坐标系的距离为焦距 f f f,由相似三角形易得:
x X c = f Z c y Y c = f Z c \frac{x}{X_c}=\frac{f}{Z_c}\\ \frac{y}{Y_c}=\frac{f}{Z_c} Xcx=ZcfYcy=Zcf
由此,得 x 、 y x、y xy的表达:
{ x = f X c Z c y = f Y c Z c \begin{cases}x=f\frac{X_c}{Z_c}\\y=f\frac{Y_c}{Z_c}\end{cases} {x=fZcXcy=fZcYc
整理为齐次坐标形式,可得:
Z c ⋅ [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] ⋅ [ X c Y c Z c 1 ] Z_c\cdot \begin{bmatrix}x\\y\\1\end{bmatrix}=\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}\cdot\begin{bmatrix}X_c\\Y_c\\Z_c\\1\end{bmatrix} Zcxy1=f000f0001000XcYcZc1

图像坐标系到像素坐标系

由图像坐标系上一点坐标 i p = [ x y ] T {}^ip=\begin{bmatrix}x&y\end{bmatrix}^T ip=[xy]T到像素坐标系上坐标 p p = [ u v ] T {}^pp=\begin{bmatrix}u&v\end{bmatrix}^T pp=[uv]T仅需要一个缩放和一个平移:

在这里插入图片描述

设坐标在 u u u轴上缩放 α \alpha α倍, v v v轴上缩放 β \beta β倍,坐标原点平移 [ c x c y ] T \begin{bmatrix}c_x&c_y\end{bmatrix}^T [cxcy]T,则可得:
{ u = α x + c x v = β y + c y \begin{cases} u=\alpha x+c_x\\ v= \beta y+c_y \end{cases} {u=αx+cxv=βy+cy
将其写为齐次坐标形式:
[ u v 1 ] = [ α 0 c x 0 β c y 0 0 1 ] ⋅ [ x y 1 ] \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\alpha&0&c_x\\0&\beta&c_y\\0&0&1\end{bmatrix}\cdot\begin{bmatrix}x\\y\\1\end{bmatrix} uv1=α000β0cxcy1xy1

综合变换

综合上述变换,可到如下形式:
Z c ⋅ [ u v 1 ] = [ α 0 c x 0 β c y 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] Z_c\cdot \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\alpha&0&c_x\\0&\beta&c_y\\0&0&1\end{bmatrix}\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} Zcuv1=α000β0cxcy1f000f0001000[R0Tt1]XwYwZw1
对等式右侧,合并由相机到图像坐标系、图像到像素坐标系的变换,得到相机到图像坐标系的变换:
Z c ⋅ [ u v 1 ] = [ f x 0 c x 0 0 f y c y 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] Z_c\cdot \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}f_x&0&c_x&0\\0&f_y&c_y&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} Zcuv1=fx000fy0cxcy1000[R0Tt1]XwYwZw1
其中,记 α f = f x , β f = f y \alpha f=f_x,\beta f=f_y αf=fx,βf=fy。其含义为焦距 f f f在图像坐标系两轴方向上的像素个数,单位像素。

右侧第一个矩阵为相机内参矩阵K(Camera Intrinsic Matrix),描述物理世界与相片像素之间的对应关系;

右侧第二个矩阵为相机外参矩阵T(Camera Extrinsic Matrix),描述世界坐标系与相机的位置关系。

左侧系数 Z c Z_c Zc称为比例因子,可记为s
s [ u v 1 ] = K T [ X c Y c Z c 1 ] s\begin{bmatrix}u\\v\\1\end{bmatrix}=KT\begin{bmatrix}X_c\\Y_c\\Z_c\\1\end{bmatrix} suv1=KTXcYcZc1

归一化坐标

投影过程可认为,将世界坐标系下点坐标 w p = [ X w Y w Z w ] T {}^wp=\begin{bmatrix}X_w&Y_w&Z_w\end{bmatrix}^T wp=[XwYwZw]T转换至相机坐标系下点坐标 c p = [ X c Y c Z c ] T {}^cp=\begin{bmatrix}X_c&Y_c&Z_c\end{bmatrix}^T cp=[XcYcZc]T,随后除去最后一维的数值(图形的深度信息),得到归一化坐标:
R [ X w Y w Z w ] + t = [ X c Y c Z c ] → [ X c Z c Y c Z c 1 ] R\begin{bmatrix}X_w\\Y_w\\Z_w\end{bmatrix}+t=\begin{bmatrix}X_c\\Y_c\\Z_c\end{bmatrix}\to\begin{bmatrix}\frac{X_c}{Z_c}\\\frac{Y_c}{Z_c}\\1\end{bmatrix} RXwYwZw+t=XcYcZcZcXcZcYc1
归一化坐标可视作为,相机平面前方z=1处平面上的点,称为归一化平面,归一化坐标左乘内参矩阵可得像素坐标。

通常认为归一化平面同图像平面相同,也即图像平面在相机平面前方z=1处

可知,在针孔模型中图像的深度信息被丢弃,无法得到。

畸变模型

透镜

为获得清晰明亮的图形,在相机前方增加透镜。透镜使得光线聚焦或分散,每个透镜由特定的对焦距离,称为景深(Depth of Field)。

透镜可将平行于光轴的光线折射至同一点,称为焦点,焦点与光心间距离为焦距 f f f。过光心的光线不会偏离原始方向。

在这里插入图片描述

透镜的加入,引起新的影响:

  • 透镜形状对传播产生的畸变,称为径向畸变(Radial Distortion)
  • 由机械安装对传播产生的畸变,称为切向畸变(Tangential Distortion)

畸变系数包含 [ k 1 k 2 k 3 p 1 p 2 ] \begin{bmatrix}k_1&k_2&k_3&p_1&p_2\end{bmatrix} [k1k2k3p1p2]

畸变

径向畸变

实际拍摄所得照片中,透镜会使得真实环境中的直线变为曲线。这种畸变越靠近图像边缘,越明显。此类畸变由于透镜形状的中心对称而通常径向对称。

径向畸变包含桶形畸变和枕形畸变两种:

在这里插入图片描述

设归一化平面上一点 p = [ x y ] T p=\begin{bmatrix}x&y\end{bmatrix}^T p=[xy]T可用极坐标表示: [ r θ ] \begin{bmatrix}r&\theta\end{bmatrix} [rθ],其中 r r r表示点p同坐标系原点的距离, θ \theta θ表示同水平轴的夹角。径向畸变可视为坐标沿长度方向的变化产生的畸变,也即距离原点长度的变化引起的畸变。
x c o r r e c t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y c o r r e c t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) r 2 = x 2 + y 2 x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6)\\ y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6)\\ r^2=x^2+y^2 xcorrected=x(1+k1r2+k2r4+k3r6)ycorrected=y(1+k1r2+k2r4+k3r6)r2=x2+y2
坐标 p c o r r e c t e d = [ x c o r r e c t e d y c o r r e c t e d ] T p_{corrected}=\begin{bmatrix}x_{corrected}&y_{corrected}\end{bmatrix}^T pcorrected=[xcorrectedycorrected]T表示畸变后的归一化坐标,通常桶形畸变 k 1 > 0 k_1>0 k1>0而枕形畸变 k 1 < 0 k_1<0 k1<0

切向畸变

切向畸变产生于相机透镜组装的不精确,由于透镜制造上的缺陷使其本身同像平面不平行而产生:

在这里插入图片描述

切向畸变可看成归一化平面上的坐标点沿着切线方向发射的变化产生的畸变,也即水平夹角变化导致的畸变:
x c o r r e c t e d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y c o r r e c t e d = y + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y r 2 = x 2 + y 2 x_{corrected}=x+2p_1xy+p_2(r^2+2x^2)\\ y_{corrected}=y+p_1(r^2+2y^2)+2p_2xy\\ r^2=x^2+y^2 xcorrected=x+2p1xy+p2(r2+2x2)ycorrected=y+p1(r2+2y2)+2p2xyr2=x2+y2

畸变模型

综合上述两种畸变类型,得到畸变模型:

在这里插入图片描述

理想点(Ideal Point)为通过坐标变换得到的坐标,真实点(Real Point)为理想点 ( x u , y u ) (x_u,y_u) (xu,yu)经过径向畸变 d r dr dr和切向畸变 d t dt dt后真实得到图像的上的点:
{ x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{cases} x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy\\ \end{cases} {xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy
其中,径向畸变由参数 [ k 1 、 k 2 、 k 3 ] \begin{bmatrix}k_1、k_2、k_3\end{bmatrix} [k1k2k3]确定;切向畸变由参数 [ p 1 、 p 2 ] \begin{bmatrix}p_1、p_2\end{bmatrix} [p1p2]决定;参数 r r r满足条件: r 2 = x 2 + y 2 r^2=x^2+y^2 r2=x2+y2

由畸变后的点通过内参矩阵可得到像素平面上的实际坐标:
{ u = f x   x d i s t o r t e d + c x v = f y   y d i s t o r t e d + c y \begin{cases} u=f_x\:x_{distorted}+c_x\\ v= f_y\:y_{distorted}+c_y \end{cases} {u=fxxdistorted+cxv=fyydistorted+cy

双目相机模型

双目相机通过同步采集左右相机的图像,计算图像间视差,估计每个像素的视差。

双目相机通常由两个水平放置的相机组成,两相机的光圈中心分别记为 O L 、 O R O_L、O_R OLOR,两者之间的距离称为双目相机的基线 b b b,相机焦距为 f f f

若对于三维空间内一点 P P P进行捕捉,此时两相机将各自成像,记为 P L 、 P R P_L、P_R PLPR。理想情况下,相机尽在X轴进行位移,对应像素仅在 u u u轴上存在差异,则记物体在两图像上的坐标为 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 z=f\frac{b}{d} z=fdb
其中,参数 d d d称为视差 (disparity),用于描述物体在两相机上形成像素的横坐标之差:
d ≜ u L − u R d\triangleq u_L-u_R duLuR
由视差可估计得到物体的深度信息,视差越大,距离越近。由于视差最小为一个像素,则双目测量具有最大值:
∀ d = 1 s . t . z m a x = f b \forall d=1\quad s.t.\quad z_{max}=fb d=1s.t.zmax=fb
也即双目相机的基线越大,测量范围就越大。

深度相机模型

RGB-D相机按原理可分为两大类:

  • 红外结构光类(Structured Light)
  • 飞行时间类(Time-of-Flight,ToF)

RGB-D相机通过向探测目标发射光束(通常为红外光)进行测距。其中结构光相机返回结构光图案以计算距离,而飞行时间则计算发射与接收时间差值计算距离。

在这里插入图片描述

根据测量结果,相机将生成3D点云信息。

图像信息

相机成像后,生成图像。图像在计算机中以矩阵形式存储(二维数组)。

在这里插入图片描述

  • 8
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值