文章目录
1.针孔相机模型
在物体和胶片之间,增加一块带有小孔的屏障,这就构成了小孔成像,用数学模型表示就叫做:针孔相机模型,而屏障上的小孔称之为光圈,并且胶片上获得倒立的图像。
物体到镜头的距离为Z,也就是深度,胶片到镜头的距离为f,也就是焦距。
单反相机摄影系统
2.各个坐标系的定义
相机的成像过程涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。
1)世界坐标系(world coordinate)
以被测物体上的点作为参考,定义的绝对坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置,单位是米。
2)相机坐标系(camera coordinate)
以相机光心为坐标原点,主光轴上物体方朝焦点方向为z轴,平行于sensor平面的两条垂直边分别为x和y轴,单位是米。
3)图像坐标系(film coordinate)
以主光轴与sensor的交点为坐标原点,平行于sensor平面的两条垂直边分别为x和y轴,这个平面是建立在实际成像面上的,是个二维坐标系,单位是毫米。
4)像素坐标系(pixel coordinate)
平行于sensor的虚拟成像平面,左上角顶点为原点,x轴和y轴都平行于图像平面,以像素为单位。
3.坐标系转换
1)从世界坐标系到相机坐标系
物体从世界坐标系到相机坐标系的刚体变换表示为:
[
x
c
y
c
z
c
1
]
=
[
R
t
0
1
]
[
x
w
y
w
z
w
1
]
\begin{bmatrix} x_c \\ y_c \\ z_c \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x_w \\ y_w \\ z_w \\ 1 \end{bmatrix}
xcyczc1
=[R0t1]
xwywzw1
其中:
旋转矩阵:
R
∈
R
3
×
3
R\in \mathbb{R}^{3 \times 3}
R∈R3×3,形式为:
R
=
[
r
11
r
12
r
13
r
21
r
22
r
23
r
31
r
32
r
33
]
R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix}
R=
r11r21r31r12r22r32r13r23r33
平移矩阵:
t
∈
R
3
×
1
t \in \mathbb{R}^{3 \times 1}
t∈R3×1,形式为:
t
=
[
t
x
t
y
t
z
]
t = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix}
t=
txtytz
外参矩阵:
变换矩阵:
[
R
t
0
1
]
\begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix}
[R0t1]
称为外参矩阵,用于描述物体从世界坐标系到相机坐标系的刚体变换(与相机无关)。
2)从相机坐标系到图像坐标系
相机坐标系到平面坐标系的转换是一个3D到2D的过程。相机坐标系的z轴与光轴是平行的,相机坐标系的原点为光轴中心。
3)从图像坐标系到像素坐标系
4)从世界坐标系到像素坐标系
相比于不变的内参,外参会随着相机运动发生改变。
内参K与外参M的乘积,是一个3×4的矩阵,称为投影矩阵,该矩阵可体现任意空间点的图像像素坐标与世界坐标之间的关系。
通过从世界坐标系到像素坐标系的公式可知,若已知投影矩阵和空间点世界坐标,则可求得空间点的像素坐标,因此,在线性模型中,一个物点在成像平面上对应唯一的像点。
4.畸变模型
为了获得好的成像效果,我们在相机的前方加了透镜。透镜的加入对成像过程中光线的传播会产生新的影响:一是透镜自身的形状对光线传播的影响,二是在机械组装过程中,透镜和成像平面不可能完全平行,这也会使得光线穿过透镜投影到成像面时的位置发生变化。
在针孔模型中,一条直线投影到像素平面上还是一条直线。可是,在实际拍摄的照片中,摄像机的透镜往往使得真实环境中的一条直线在图片中变成了曲线。越靠近图像的边缘,这种现象越明显。由于实际加工制作的透镜往往是中心对称的,这使得不规则的畸变通常径向对称。它们主要分为两大类,桶形畸变和枕形畸变。
桶形畸变是由于图像放大率随着离光轴的距离增加而减小,而枕形畸变却恰好相反。
5.标定建模
综合以上描述的内容,我们可以把相机的成像模型,或者说相机标定的数学模型看成一个理想的模型加一个误差模型,理想模型就是针孔相机模型,误差模型就是畸变引起的一个误差。
结合针孔相机模型+镜头畸变,那么相机标定数学模型为:
整个流程的总结:世界坐标系中的一点,通过刚体变换到相机坐标系下,再通过针孔成像的原理变换到图像坐标系,然后归一化到单位焦平面上去做去畸变处理,最后就是把图像进行数字化处理,转化到像素坐标系上。
6.标定算法: 直接线性标定法DLT
标定算法的基本思路是在较高精度的2D-3D对应点基础上,先采用DLT或张正友方法求初值,然后非线性优化迭代求解精确解。本文主要分享DLT方法。
Abdel-Aziz和Karara于20世纪70年代初提出了直接线性变换DLT(direct linear transformation)的摄像机标定方法,这种方法忽略摄像机畸变引起的误差,直接利用线性成像模型,通过求解线性方程组得到摄像机的参数。
DLT方法的优点是计算速度很快,操作简单且易实现;缺点是由于没有考虑摄像机镜头的畸变,因此不适合畸变系数很大的镜头,否则会带来很大误差。
DLT标定法需要将一个特制的立方体标定模板放置在所需标定摄像机前,其中标定模板上的标定点相对于世界坐标系的位置已知。
首先,由立体标定参照物图像求取投影矩阵的算法,公式如下:
L’为L的前11个元素组成的向量,C为A前11列组成的矩阵,B为A第12列组成的向量。求解的过程通过构造伪逆矩阵来求解。
不得不提的是,若要通过上式求得的最小二乘解,有一些约束条件要注意。
- 观测值的数量要不小于6。
- 观测值没有严重粗差。
- 如果所有输入点在一个平面上,则无法解出理想的 。
DLT实现细节1:解线性方程组求解投影矩阵 M
重新排列方程后,我们只需在 M 的零空间中找到一个非零向量即可求解系统。然而,在大多数情况下,由于测量时有噪声,不会有精确解。因此,寻找最小化总误差的解更为方便,本质上是求解最小二乘问题。
解决该问题的一种方法是使用奇异值分解 (SVD)。分解大矩阵 M 后,我们可以取与最小奇异值相对应的右奇异向量,这样我们就找到了相机矩阵 P。然后,我们可以使用前面提到的 QR 分解方法将 P 分解为 K [R t]}。
DLT实现细节2:QR分解得到 K R T
计算相机位置:
DLT实现细节3:非线性迭代优化
实际上前两节已经完整的描述了DLT直接线性变换法进行相机标定的理论基础,但是实际上我们并不会直接采用前两节的结果作为最终结果。有一定相机标定经验的同学都了解,镜头畸变、观测噪声导致直接通过理论公式计算出来的结果是不精确的,同张式标定法一样,我们同样需要通过非线性迭代优化的方式最小化重投影误差以求得更精确的内外参,而DLT法计算的内外参则做为迭代优化的初值。
DLT实施
所以,DLT直接线性变换法的实施步骤可以总结为:
- 多个角度拍摄已知世界坐标的控制场
(1)如果图片中点数很多,且分布合理,其实一个角度也可以
(2)控制场也可能是三维标定板
-
提取图像中控制点的像素坐标。(提取精度当然是越高越好)
-
通过求解线性方程组计算投影矩阵
-
对投影矩阵
进行QR分解得到内外参矩阵 -
将镜头畸变考虑进来,列出重投影误差函数,非线性迭代优化法计算精确内外参矩阵(初值为3,4的结果)和畸变参数(初值为0)
参考文献
[1] 相机模型 - 坐标系转换
[2] 相机标定(原理、过程、代码实现、畸变矫正)
[3] 3D视觉相机模型与标定详解
[4] 三维重建之摄像机标定:DLT方法
[5] 立体视觉入门指南(4):相机标定之DLT直接线性变换
[6] DLT相机标定算法
[7] python实现DLT和NLT相机标定方法研究
[8] 直接线性变换解法(DLT)用于标定相机
[9] 针孔相机模型、相机镜头畸变模型、相机标定