0 参考文献

[1] c++opencv相机标定(calibrateCamera)详解

[2] Python OpenCV 相机标定与鸟瞰图转换

1 基本原理

相机成像的过程即真实三维世界在相机传感器平面的投影过程。可以通过一个数学模型将真实物体的三维坐标与图像中的二维坐标一一对应,这个数学模型(相机矩阵)的求取计算过程就是相机标定。如图1所示 a06161da4dfd61fe0d629d71d6e7fa56.png 图1 相机矩阵

从三维坐标(世界坐标系)到二维坐标(图像坐标系)又可以分为三个步骤:

(1)从世界坐标转换到相机坐标; (2)从相机坐标转换到图像坐标; (3)从图像坐标转换到像素坐标。 d20a7ca3429ccc43737c3e6283e44607.png 图2 世界坐标、相机坐标、图像坐标、像素坐标

如图2所示: (1)坐标系(Xw, Yw, Zw)为世界坐标系; (2)坐标系(Xc, Yc, Zc)为相机坐标系; (3)坐标系(x, y)为图像坐标系; (4)坐标系(u, v)为像素坐标系;

1.1 从世界坐标系到相机坐标系

如图2所示,点P从世界坐标(Xpw, Ypw, Zpw)到相机坐标(Xpc, Ypc, Zpc)的变换包含了一个三维的旋转变换R以及一个平移变换t,齐次表达式为: ae3a9a0b46d15d3b0f0ce3613a79d843.png

其中R为3×3大小的旋转矩阵,t为3×1的平移矩阵,变换矩阵P为3×4大小的矩阵: b6d7a9c199b48c300ce3dab1609aac5f.png

1.2 从相机坐标到图像坐标

86c6872a14250dcf2eaf162dcd820535.png 图3 小孔成像模型

如图3所示为小孔成像模型,则有P的相机坐标(Xpc, Ypc, Zpc)到图像坐标(xp, yp)有: 9e8e676705ebad67f72a5b5ebf96b7ce.png 转换为矩阵为: 5215b1eea5c8278f9ed7d2a198202f5a.png fx, fy分别为x, y方向上的焦距。

1.3 从图像坐标转换到像素坐标

如图2所示,图像坐标系平面可以认为是理想的成像面,像素坐标系则是相机传感器平面,理想情况下图像坐标平面和像素坐标平面在同一平面,则从图像坐标转换到像素坐标有两个步骤:

(1)缩放,在前面的坐标系中,坐标系单位是统一的实际距离单位,但是像素坐标系的单位不一样,因此要缩放,换算到像素坐标系;

(2)平移,从图像坐标系原点到像素坐标系原点。

则变换为: 482e676a516cb16ed7c40d48c7b52cea.png

其中sx和sy为单位长度的像素数。

以上是理论情况下,但是在实际中可能由于相机传感器的问题导致图像轴不垂直的情况,如下图4 049fe7eb80838854664f625af6e48706.png 图4 图像轴不垂直 可以认为在y方向坐标不变,x方向坐标存在偏移,则有 52ba6ab3a2ae63843d7d48e64830aaec.png 其中c为偏移系数。

1.4 相机内参、外参

由1.1, 1.2, 1.3小结,得到最终的由世界坐标到像素坐标转换关系: fdbc2b72783011dc1abc4d80c0064e15.png 即: 0a15894c029fcd655cfa657e63690107.png 得到: 9fc5a63f111be381724e75490f1d66ef.png 1.5 镜头畸变系数 除了相机硬件的参数外,镜头也不会是理想中的完美镜头,由于镜头的缺陷也会导致坐标换算出现误差,因此需要考虑镜头带来的图像失真。镜头带来的畸变包括径向畸变和切向畸变两种。

1.5.1 径向畸变

当光线在镜头边缘附近比在其光学中心弯曲得更多时,就会发生径向畸变。镜头越小,畸变越大。包含枕形(pincushion)、桶形(barrel)两种: 6e573e13a61e45132f96f184bd105394.png 图5 镜头畸变

径向畸变通过径向畸变系数模型表示并校正: 4353ca14ba10b1e9920dd42fb1910ea6.png 其中:

x, y为未发生畸变的像素位置;

k1, k2, k3为径向畸变系数,一般两个系数就足够校准,但是对于大畸变如广角镜头就需要三个系数;

r^2 = x^2 + y^2.

1.5.2 切向畸变

当镜头和像平面不平行时会发生切向畸变: 01aa7afee07baeafcb4e95e2b9503475.png 图6 切向畸变 切向畸变通过切向畸变系数模型表示并校正: c1e44181b8aaf198d4dfca3007fb90e0.png x, y为未发生畸变的像素位置;

k1, k2为切向畸变系数;

r^2 = x^2 + y^2.

1.6 小结

相机标定主要计算:

(1)相机外参:世界坐标系到相机坐标系的变换矩阵(三轴旋转角度+三轴平移量总共6个参数)

(2)相机内参:焦距(fx, fy),光心/主点(cx, cy),倾斜系数(c)(5个参数)

(3)镜头畸变系数:径向畸变系数和切向畸变系数(k1, k2, p1, p2,4个参数)

2 张正友标定法

「张氏标定法」是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration By Viewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。

2.1 单应性、单应性矩阵、齐次坐标

单应性: 平面的单应性被定义为从一个平面到另一个平面的投影映射,单应性变换或投影变换;

单应性矩阵: 两个投影平面的变换矩阵,投影变换矩阵;

齐次坐标: 类似定义三维空间坐标系的笛卡尔坐标系,齐次坐标系定义投影空间,齐次坐标与笛卡尔坐标转换关系如下: 二维平面: bf94657611f76e1bddb76ecca77b14cc.png 三维空间: 97b63a7bb6d2d72ac70328d45a44fad1.png

2.2 张正友标定法数学模型

2.2.1 基本方程

在不考虑镜头畸变时,模型点到图像点的变换关系表示为: c9a7d310c4e64609de637adb197fe119.png 假设模型平面在世界坐标系的Z = 0(标定时将棋盘格作为世界坐标系原点,则Z=0)上。让我们用ri表示旋转矩阵R的第i列,则由(1)有: 4f76379921984f3bdfcfe1061e1e5cab.png 其中: cfc01cd9011534bd59d3617624777c5b.png H是一个3×3的系数矩阵(单应性矩阵): b1e96da9661ac208add68649f3421878.png 对于齐次坐标系中的H有性质:

这里使用的是齐次坐标系,也就是说可以进行任意尺度的缩放(s为尺度因子),也就是说把H乘以任意一个非零常数k并不改变上式结果,无非就是尺度因子s有所改变。

例如将H乘以1/h33: 7479530d924c4c932c016e268a8667d7.png H’与H带入公式(2)得到的计算结果u, v相等。因此可以认为H只有8个自由度。

2.2.2 内在参数的约束条件

令 H = [h1 h2 h3],则由公式(3)有: 78e4f26ac142ad2d715cfa05d76c98a3.png 其中k为任意的尺度因子。由于旋转矩阵是一个标准的正交矩形,因此r1和r2为正交的单位向量,有: 72693862e09973647038f27d444a07e3.png 有公式(4)有: aeeb1038c7640306089abaf187d996f7.png 进一步由公式(6)得到: 873b0f031aae68910c6855995f1f4861.png 结合公式(5)和(7)有: a40c5d5591f00510fbd08d40317b4edd.png 得到(8)(9)两个约束。

2.2.3 参数求解

参数求解过程:

(1)给出一个封闭解

(2)根据最大似然估计给出非线性的最优化解

(3)考虑镜头的径向畸变(张正友标定法不考虑切向畸变),给出解析解和非线性解

2.2.3.1 封闭解

有: f762e8a3500771a68778aa12f8b29c9d.png 令: 93e1b777bddc2ed9556578d8f598e9eb.png 其中B是一个对称矩阵,设一个六维向量b: cefc8094ba46aa301599b05f1ce782e1.png 设H的第i列向量为 99bbe07c001bbf8215d774e6a3356e6b.png 有: bbd9d19a3b4adccdede8551be396ad74.png 其中: cccd539d3094659a8f6571c0e0134187.png 约束公式(8)(9)可以重写为: ef3f8660c53d153c1693407dc9d812b9.png 由上面两式得到: 48344b3b0dd81b124c1c67946b732964.png 公式(13)为一个给定单应性中的两个基本约束条件,即标定一张图像就给出上面两个约束。通过标定n张图像,则有n个公式(13),叠加表示得到: dfacbb560b20b0fea25d6f6cd0e424e0.png 其中V是一个2n*6的矩阵。 因为b是一个6维向量,因此最少有6个方程就可以求解这6个未知量,每张图像可以提供两个约束方程。若有3张图像则可以解出给定比例因子的6维向量b的解。

若只有2张图像,可以施加无倾斜系数的约束,即c=0,有: 3bc0965d86d61eeff76db3879a0ab02b.png 将上式代入(13)作为额外约束。

得到b的解后,即得到B,并解出相机内参A。解出A,则能够解出相机外参。

得到B后。相机内参A计算如下: d61c7f138bd1a779a05289b409f3c9a9.png 根据上式计算得到A后,可以计算相机外参: 88e901dff07a258c8be7096cd1488fa3.png 这里计算得到的R比一定满足标准旋转矩阵的性质,需要优化。

2.2.3.2 最大似然估计

上述解是通过最小化一个没有物理意义的代数距离而得到的。可以通过最大似然推理来改进它。

若给出模型平面上n张图像,模型平面上有m个点,假设图像点被独立且同分布的噪声破坏。最大似然估计可以通过最小化以下函数来得到: 5e2a496972c3d6b56830405f2ac33f46.png 一个旋转R由一个包含3个参数的向量参数化,用r表示,它平行于旋转轴,其大小等于旋转角。R和r由罗德里格斯公式相关联。最小化公式(14)是一个非线性最小化问题,它可以用在Minpack中实现的LM算法来求解。它需要一个初始参数值:A,{Ri,ti|i=1…这个初始参数则可以使用2.2.3.1中所求的参数解。

2.2.3.3 处理镜头径向畸变

在前面1.5.1中定义了图像的径向畸变系数模型: 1958e54d2323f7ccce704c8879c2102b.png 在张正友数学模型中只考虑k1,k2: 754d4626d15d17ec50ce5f757f3f1ac2.png 将上式从图像坐标系转到像素坐标系有: 8cb12f00ba0a009bcc3ce20ac466f7ee.png 将上式转换到矩阵形式: 130100442bbc5e32d782b71cac92874d.png 因此每个图像上的模型点可以提供上面两个方程,则n张图像m个模型点有2mn个方程,矩阵形式为: 6f1e9cb924fbf024a0645e4d2224efdd.png 线性最小二乘解可由公式得出: e1099e8d5a75b1b2df80bb908c472470.png 一旦估计了k1和k2,就可以通过(15)求得的投影点带入公式(14)来细化其他参数的估计,交替使用这两个方法,直到收敛为止。 实验结果表明,上述交替技术的收敛速度较慢。对(14)的一个自然扩展是通过最小化以下函数来估计完整的参数集: c90ae1773562c94d2d438a663498af37.png 上式使用LM算法来求解。需要的初始参数值:A,{Ri,ti|i=1…可以使用2.2.3.1中所求的参数解或者2.2.3.2中所求的参数解或者简单设为0.

2.3 张正友标定法标定步骤

(1)打印图案(如棋盘格)并将其附着到平面表面上;

(2)通过移动平面或摄像机,拍摄不同方向的图像;

(3)检测图像中的特征点;

(4)利用2.2.3.1所述的封闭解估计五个内在参数和所有外部参数。

(5)通过求解线性最小二乘法来估计径向畸变的系数;

(6)通过最小化来细化所有参数。

Avatar photo

作者 skyate

发表回复