「CameraCalibration」传感器(相机、激光雷达、其他传感器)标定笔记

没写完,但可看
------------------分割线----------------------

看了很多次相机标定,但都是看个模模糊糊,希望这次能够通过写blog掌握并精通与相机标定相关的知识。

备注:本篇文章适合复习/快速上手,不适合想弄懂相机标定原理的人

相机标定

背景

自从相机发明了后,我们能够使用相机将三维世界的场景以二维图像的形式保存下来,相机将三维场景中的信息转成二维图像的过程,引出了一个问题:能否通过计算模拟3D到2D的逆向过程。一旦这个问题解决了,那么就可以干很多事情了:图像畸变矫正、图像深度估计、三维重建等。而事实证明,该逆向过程是可以通过计算模拟的,计算的过程叫做相机标定

相机标定用数学模型模拟了三维场景到二维图像的逆向过程,为什么是模拟呢,因为我们只能将高维数据降维成低维数据,而无法用低维数据恢复高维数据。相机标定使用的技巧就是,利用视觉上的三维信息,计算二维图像转换成三维物体的参数

相机成像原理

坐标系说明

相机成像涉及到四个坐标系:世界坐标系、相机坐标系、成像坐标系、像素坐标系

  • 世界坐标系
    在世界坐标系中,只要世界中的物体没有发生移动,那么该物体在世界坐标系中的坐标是不会改变的。举个例子,前面空地有一个人和一台相机,人和相机都在世界坐标系下,只要人和相机没有发生位置移动,那么人和相机在世界坐标系下的坐标是不会发生改变的

  • 相机坐标系
    相机坐标系由相机的位置唯一确定,相机坐标系的三个维度由光心(相机坐标系原心)和过光心与投影平面平行的三个维度构成。还是上面的例子,假如前面空地有一个人和一台相机,如果人在世界中发生了位置的移动,那么在相机坐标系中,人的坐标发生变化,相机的位置是相机坐标系的原点;如果相机在世界中发生了位置的移动,但人没有动,那么在相机坐标系中,人的坐标仍然发生了变化,相机的位置(尽管是相机移动了)仍然是相机坐标系的原点。

  • 成像坐标系
    成像坐标系的原点是光轴与成像平面的交点,成像坐标系的x, y在成像平面上。这里的成像平面,已经是在相机内部了,但与像素坐标系有一定区别;并且成像坐标系的原点,在光轴上,也是相机透镜的物理中心。

光轴垂直于相机坐标系xy平面和成像坐标系xy平面,因此两个坐标系的z轴均在光轴上

  • 像素坐标系
    像素坐标系的原点即我们平时看到的图像的左上角。像素坐标系和成像坐标系的区别是,像素坐标系的原点在左上角,成像坐标系的原点在图像中心

成像流程

世界坐标系下的物体 —> 相机坐标系下的物体 —> 成像坐标系下的物体 —> 像素坐标系下的物体(即我们看到的图像中的物体)

世界坐标系→相机坐标系

世界坐标系和相机坐标是三维坐标系,一个物体在两个坐标系中均有长宽高的度量。

假定物体在世界坐标系下的坐标为 ( W x , W y , W z ) ({W}_{x}, {W}_{y}, {W}_{z}) (Wx,Wy,Wz),物体在相机坐标系下的坐标为 ( C x , C y , C z ) ({C}_{x}, {C}_{y}, {C}_{z}) (Cx,Cy,Cz),旋转矩阵为 R 3 × 3 {R}_{3\times3} R3×3,平移矩阵为 T 3 × 1 {T}_{3\times1} T3×1

那么物体从世界坐标映射到相机坐标系的过程应该是先平移,后旋转

先将物体在世界坐标系下的坐标减去相机在世界坐标系下的坐标,获取到物体与相机的相对距离(如果能直接得到物体和相机的相对距离向量更好),然后再对物体的相对距离做旋转(如果物体是一个点,则直接用点的相对坐标乘以旋转矩阵;如果物体是由多个点构成的刚体,那么则用每个点的相对坐标乘以旋转矩阵)。整个先平移,后旋转的过程用数学公式表达可以写成:
[ C x C y C z 1 ] = [ R 0 0 1 ] × [ E − T 0 1 ] × [ W x W y W z 1 ] \begin{bmatrix} {C}_{x} \\ {C}_{y} \\ {C}_{z} \\ 1 \end{bmatrix} = \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} E & -T \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix} CxCyCz1=[R001]×[E0T1]×WxWyWz1

其中 R R R T T T构成的分块矩阵 [ R T 0 1 ] \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} [R0T1]是相机标定中提到的外参;暂时不用管矩阵值是什么,记住这个公式接着往下看

相机坐标系→成像坐标系

成像坐标系,顾名思义成像二字,很容易知道成像平面坐标系是二维的;此外,成像平面可以抽象地理解为相机内部的一个物理平面,该平面有相机观测到的外部三维世界的二维成像。

假定物体在相机坐标系下的坐标为 ( C x , C y , C z ) ({C}_{x}, {C}_{y}, {C}_{z}) (Cx,Cy,Cz),成像后的物体在成像平面坐标系下的坐标为 ( G x , G y ) ({G}_{x}, {G}_{y}) (Gx,Gy),成像过程中涉及的相机焦距为 f f f,那么物体在三维世界中的坐标映射到相机成像平面的数学变换,可写作:
[ G x G y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] × [ C x C y C z 1 ] \begin{bmatrix} {G}_{x} \\ {G}_{y} \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} {C}_{x} \\ {C}_{y} \\ {C}_{z} \\ 1 \end{bmatrix} GxGy1=f000f0001000×CxCyCz1

其中矩阵 [ f 0 0 0 0 f 0 0 0 0 1 0 ] \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} f000f0001000是相机标定中提到的内参之一;这里的矩阵计算用到的原理包括小孔成像和相似三角形,具体细节见参考链接中的《相机成像原理》

成像坐标系→像素坐标系

假定物体在成像平面/成像坐标系下的坐标为 ( G x , G y ) ({G}_{x}, {G}_{y}) (Gx,Gy),物体在像素坐标系下的坐标为 ( P x , P y ) ({P}_{x}, {P}_{y}) (Px,Py),成像平面原点与像素平面原点之间在x方向和y方向的尺度距离为 ( o x , o y ) ({o}_{x}, {o}_{y}) (ox,oy),对应的尺度因子为 ( s x , s y ) ({s}_{x}, {s}_{y}) (sx,sy)

因为成像平面可以抽象理解为相机内部的一个物理平面,那么从物理平面的尺度转换到像素平面/图像尺度,所使用到的尺度缩放参数假定为 ( s x , s y ) ({s}_{x}, {s}_{y}) (sx,sy)

成像坐标系转换到像素坐标系,转换过程类似于一个点在二维平面上的平移,因此,这个平移过程可以写成:
P x = 1 s x G x + o x {P}_{x} = \frac {1} {{s}_{x}} {G}_{x} + {o}_{x} Px=sx1Gx+ox P y = 1 s y G y + o y {P}_{y} = \frac {1} {{s}_{y}} {G}_{y} + {o}_{y} Py=sy1Gy+oy

写成矩阵运算的形式:

其中尺度距离 s s s与尺度因子 o o o是相机标定中提到的内参之一

总结

[ P x P y 1 ] = 1 C z [ 1 s x 0 0 0 1 s y 0 0 0 1 ] × [ 1 0 o x 0 1 o y 0 0 1 ] × [ f 0 0 0 0 f 0 0 0 0 1 0 ] × [ R 0 0 1 ] × [ E − T 0 1 ] × [ W x W y W z 1 ] \begin{bmatrix} {P}_{x} \\ {P}_{y} \\ 1 \end{bmatrix} = \frac {1} {{C}_{z}} \begin{bmatrix} \frac {1} {{s}_{x}} & 0 & 0 \\ 0 & \frac {1} {{s}_{y}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} 1 & 0 & {o}_{x} \\ 0 & 1 & {o}_{y} \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} E & -T \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix} PxPy1=Cz1sx1000sy10001×100010oxoy1×f000f0001000×[R001]×[E0T1]×WxWyWz1
即:
[ P x P y 1 ] = 1 C z [ 1 s x 0 0 0 1 s y 0 0 0 1 ] × [ f 0 o x 0 0 f o y 0 0 0 1 0 ] × [ R 0 0 1 ] × [ E − T 0 1 ] × [ W x W y W z 1 ] \begin{bmatrix} {P}_{x} \\ {P}_{y} \\ 1 \end{bmatrix} = \frac {1} {{C}_{z}} \begin{bmatrix} \frac {1} {{s}_{x}} & 0 & 0 \\ 0 & \frac {1} {{s}_{y}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} f & 0 & {o}_{x} & 0 \\ 0 & f &{o}_{y} & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} E & -T \\ 0 & 1 \end{bmatrix} \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix} PxPy1=Cz1sx1000sy10001×f000f0oxoy1000×[R001]×[E0T1]×WxWyWz1

[ P x P y 1 ] = M × [ W x W y W z 1 ] \begin{bmatrix} {P}_{x} \\ {P}_{y} \\ 1 \end{bmatrix} = M \times \begin{bmatrix} {W}_{x} \\ {W}_{y} \\ {W}_{z} \\ 1 \end{bmatrix} PxPy1=M×WxWyWz1

因此不管是在什么投影过程中,只需要弄懂从哪里到哪里的投影,直接使用上面对应的矩阵即可

相机畸变

背景

相机成像是通过透镜成像,而由于透镜的制造精度和组装工艺,成像会存在畸变,导致成像图片与我们视觉上看到的不同,存在扭曲

畸变类型主要分为两类:径向畸变和切向畸变。

径向畸变
径向畸变是沿着透镜中心向透镜平面展开的畸变,它产生的原因是光纤在透镜中心的地方比靠近中心的地方更加弯曲。径向畸变可分为枕型畸变和桶型畸变两种

切向畸变
切向畸变是由于透镜与成像平面不平行产生的,是有组装工艺导致的畸变误差

总之,我们一共需要五个畸变参数 ( k 1 , k 2 , k 3 , p 1 , p 2 ) ({k}_{1}, {k}_{2}, {k}_{3}, {p}_{1}, {p}_{2}) (k1,k2,k3,p1,p2)来描述相机产生的畸变,其中 k 1 , k 2 , k 3 {k}_{1}, {k}_{2}, {k}_{3} k1,k2,k3描述的是径向畸变的泰勒多项式参数,在这里取了前三阶; ( p 1 , p 2 ) ({p}_{1}, {p}_{2}) (p1,p2)描述的是切向畸变的修正。

相机标定方法

传统相机标定法

主要有:

  • 基于3D立体靶标定法
  • 基于2D平面靶标定法(张正友标定法)
  • 基于径向约束的两步标定法(Tsai标定法)

主动视觉相机标定法

相机自标定法

参考链接

相机标定究竟在标定什么?
相机成像原理
镜头产生畸变的原因
张正友标定法原论文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值