智慧交通day03-车道线检测实现02-2:张氏标定法+双目标定

简介: 该方法介于传统标定法和自标定法之间,既克服了传统标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程不需要特殊的标定物,只需使用一张打印出来的棋盘格,并从不同方向拍摄几组图片即可,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。

6.张氏标定法


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


37656a77efa946f1b851d879b144517b.png


该方法介于传统标定法和自标定法之间,既克服了传统标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程不需要特殊的标定物,只需使用一张打印出来的棋盘格,并从不同方向拍摄几组图片即可,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。


6.1. 棋盘格数据


棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。如下图所示,是相机在不同方向下拍摄的同一个棋盘图像。如下图所示:


f788c4e9d65e4b16a8a4c6340cc76249.png


6.2. 单应性矩阵


张氏校正法是基于平面棋盘格的标定,首先我们介绍下两个平面中的单应性映射,在计算机视觉中,单应性(Homography)指从一个平面到另一个平面的投影映射,所以在标定物平面与图像平面之间存在单应性。


上文中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系,因为标定物是平面,我们假设标定棋盘位于世界坐标中z=0平面,然后进行单应性计算。化简前文中的公式有:


866441f796c7465e938aa275cdd279f0.png



那单应性矩阵定义为:08889d3b64dd43aeb5b6b5200c89711e.png


代入上式中有:


cfc0ee7aaced49398e073ce9b216ac37.png


那怎么求H的值呢?


假设单应性矩阵H为:


21d6c5b253174987a243ec745d3f59ec.png


假设图像中对应点的齐次坐标为图像点(u,v,1)和真实世界点(x,y,1)则有:


17847e54b8ef46c980d5a2ed5565307b.png


将上述矩阵展开后有三个等式:


a83f32f7b1dd463da65675202ecd0d4a.png


将最后一个公式代入前两个公式中:


82617c7e556d47b993ea2a12f3d7e5a6.png


所以一组点对应着两个等式。


95f27c4102c84201a49be54584c91113.png


下面我们将上面的公式展开:


8d1148fc19114e5cbfbe5726bd6e7827.png


将其整理下:


ca569494961b42a8a894ade874faa431.png


假如我们得到了标定物与图像中对应的N个点对,那么有线性方程组为:


500ed76a329a40979b3f6d743225e3fd.png


因为单应性矩阵中包含齐次坐标,我们可以直接将和h33设为1,剩余的8个参数未知的H至少需要4个点对即可计算出来。


6.3. 利用约束条件求解内参矩阵


通过上述介绍,应用4个点我们可以获得单应性矩阵H。但是,H是内参和外参的合体。如果我们想要最终分别获得内参和外参,需要想个办法,先把内参求出来。然后外参也就随之解出了。现在我们把单应性矩阵写成三个列向量的形式:


85c324acf2eb4caca143b58f2de53ec0.png


根据单应性矩阵的定义,有:


f3992d9a67e5435eb6470f0bff06148f.png


其中,λ是标量。


我们知道r1和r2是世界坐标系沿x和y轴的旋转向量,所以两者之间是正交的,且模长为1,可得出两个约束条件:


约束条件1:r1和r2的点积为0,即:


e16bf6a6cd50490b94e5f42c1af5c009.png


约束条件2:r1和r2的模长为1,即:


ab4804dcb3ab4ab5a61d22101d39ebd3.png


将r1和r2用h1,h2和内参矩阵A表示,即:


d55925c5af1e44eea68684076cc004e7.png


接下来将约束条件替换为h1,h2和内参矩阵A的表示,则有:


4330f766e62643eaa798a6ff9b5effce.png


其中,h1和h2已通过单应性矩阵求解出来,未知量就是内参矩阵A了。


82fa8f0ce84a4fcab3ea3648b4490665.png


首先令:


78fb8cf70cc644b48cbf40b9a7ca95f4.png


内参矩阵和它的逆分别是:


1c7d0b0f2cbb4ea99e670a1ff2ce5eeb.png


6c204a35e5f54902b21f7df020d570dc.png


则B矩阵为:  


aad6d798eda943c4868970d2be1ee508.png


从上式中可以发现B是一个对称阵,所以B的有效元素只剩下六个(因为有三对对称的元素是相等的,所以只要解得下面的6个元素就可以得到完整的B了),让这六个元素构成向量b。


c41437a5d8654aa79f037d44e67e223e.png


接下来我们在做一下化简,令:


c3be84e8732742e7a13a214f184917f2.png


即单应性矩阵H的某一列向量,假设:


82672bd2539446818b18367b895fe181.png


推导可得:


687068b4cc1e4531a37445854de3d0f5.png


利用约束条件,有:


67c80f6ebdef43aa8057a6366dc4308b.png


这个方程组的本质与用h和A组成的约束条件方程组是一样的。


得到矩阵B之后我们就可以计算内参矩阵A,很简单,内参矩阵中有5个未知参数,结果如下:


4aca3eebc8e848dfb04c253402b03489.png


6.4. 基于内参矩阵估计外参矩阵


通过上面的计算,我们已经得到了相机的内参矩阵A,根据下式:


ba8e64cd0baf417cbf5d1294932ac143.png


进行化简,即可得到相机的外参矩阵。


df9528983ac54b1ba0904eba26753d7c.png


上述的推导过程是基于理想情况下的解,从几何推导上证明了张氏标定的可行性,并没有物理意义。在实际应用中,一般使用极大似然估计进行结果进行改善。


6.5. 极大似然参数估计


首先我们回顾下极大似然估计:极大似然估计是一种估计总体未知参数的方法。它主要用于点估计问题。所谓点估计是指用一个估计量的观测来估计未知参数的真值,即在参数空间中选取使得样本取得观测值的概率最大的参数


例如:有两个外形完全相同的箱子,甲箱中有99只白球,1只黑球;乙箱中有99只黑球,1只白球。一次实验取出一只球,该球是黑球。问题是:黑球从哪个箱子中取出的?


67e40e003edc44c2bcc17001a0c6a57e.png


第一印象是:黑球最像是从乙箱中取出来的,这个推断是符合人们的经验事实。“最像”即为“极大似然”之意,这种想法被称为“极大似然原理”。


3bd4705cc14842888ec53f131ae567a2.png

f20ddb656134415cbefe0030f47ba66e.png



那怎么使这个函数最小呢?张氏标定法运用了解决多参数非线性优化问题的LM算法,我们接下来给大家进行介绍。


6.6.优化方法


上一节中我们介绍到极大似然求解时,我们提到了LM算法。如果要优化的问题为线性的可以直接对目标函数求导,并且令其等于零,以此求得其极值,并通过比较求取全局最小值(Global Minimizer),并将其最为目标函数的解。但是如果问题为非线性,此时我们通常无法直接写出其导数形式(函数过于复杂),因此不去试图直接找到全局最小值,而是退而求其次通过不停的迭代计算寻找到函数的局部最小值(Local Minimizer),并认为该局部最小值能够使得我们的目标函数取得最优解(最小值),这就是非线性最小二乘的通常求解思路。很显然,在张氏较正中优化问题并不是线性的,我们需要通过迭代来求最优解。


那如何进行迭代计算呢?


6.6.1. 迭代方法


252af6daea884232bac5c981b0482c1a.png

6e13e74d37cf4979b269bdf0ca923ce9.png


梯度下降法大家已经在机器学习中接触过,我们现在根据LM算法的发展,依次介绍:牛顿法,高斯牛顿法和LM算法。


6.6.2. 牛顿法


牛顿法主要用来解决非线性优化问题,其收敛速度比梯度下降速度快。主要思想是:在现有的极小值估计值的附近对目标函数做二阶泰勒展开,进而找到极小点的下一个估计值,反复迭代直到函数的一阶导数小于某个接近0的阀值。


25eff484e63c411f8f1baea375f5328a.png


e4be1c88de844db3b34caf7c8fdf60ae.png


b621840b1c0c40fba75986aaa169b05f.png


79867a2571564eee8d24a170c2c7cc5c.png


所以:


55f3f92bbaa74eb4bc32618ac977d112.png

407e3a29dead47238af7383fdc3fb443.png

2ef6ce0260504c6eab969661e8e788ab.png


什么是雅各比矩阵和hessian矩阵?

555ba307c62c405f974dcc987c2524f5.png

9ba2f21c969a413fb7da127aab131dfa.png


牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。下图中红线表示牛顿法,绿线表示梯度下降法。


42afc3de13fe475d9145910332ba5b79.png


牛顿法的缺点是包含Hessian矩阵的计算,在高维度计算Hessian矩阵需要消耗很大的计算量,甚至无法计算。


6.6.3. 高斯牛顿法


高斯牛顿(Gauss-Newton)法是对牛顿法的一种改进,它用雅克比矩阵的乘积近似代替牛顿法中的二阶Hessian 矩阵,从而省略了求二阶Hessian 矩阵的计算。下面来看看高斯牛顿法是怎么做的。


d00475721dba413c8c4e11316fc25096.png


e0d78e0aed0b4608a8a184029ceec9a6.png


f86ac36f8ee645bc940316f750f7555a.png


6.6.4. LM法


Levenberg-Marquardt(LM)法在一定程度上修正了高斯牛顿法的缺点,因此它比高斯牛顿法更加鲁棒,不过这是以牺牲一定的收敛速度为代价的--它的收敛速度比高斯牛顿法慢。


下面来看看LM算法到底怎么修正高斯牛顿法的缺点的?


65f2dce97bc74570b1e696d192c55553.png


LM采用的搜索方法是信赖域(Trust Region)方法,因为高斯牛顿法中采用近似泰勒函数只在展开点附近有较好的近似效果,如果步长太大近似就不准确,因此我们应该给步长加个信赖区域,在信赖区域里,我们认为近似是有效的,出了这个区域,近似会出问题。


e13304c9f1ab4922b3e5937c2856918e.png


下面我们通过一个示例来看下LM算法的流程:


b5381eb925884502ab7c1106b45864f6.png

61737d8df92b4680b66ae1114c40e73c.png



LM算法可以一定程度避免系数矩阵的非奇异和病态问题,可以提供更鲁棒、更准确的步长。因此LM算法在相机标定、视觉SLAM等领域中应用非常广泛。


6.7. 标定流程


张氏标定就是利用一张打印的棋盘格,然后对每个角点进行标记其在像素坐标系的像素点坐标,以及在世界坐标系的坐标,张氏标定证明通过4组以上的点就可以求解出H矩阵的值,但是为了减少误差,具有更强的鲁棒性,我们一般会拍摄许多张照片,选取大量的角点进行标定。具体过程如下:


  • 打印一张棋盘格标定图纸,将其贴在平面物体的表面.
  • 拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现。
  • 对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点,中间品红色的圆圈内就是一个角点)。我们定义打印的棋盘图纸位于世界坐标系zw=0的平面上,世界坐标系的原点位于棋盘图纸的固定一角(比如下图中黄色点)。像素坐标系原点位于图片左上角。


fe6f3950fd09429a93d3ef655265b752.png


  • 因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到单应性矩阵H,进而得到相机的内参,外参等信息。


7. 双目标定


对于双目立体视觉,有两个摄像头。它们就像人的一双眼睛一样,从不同的方向看世界。两只眼睛中的图像的视差,让我们对世界有了三维的认识。


双目标定不仅要计算出每个摄像头的内部参数,还需要通过标定来测量两个摄像头之间的相对位置(即右摄像头相对于左摄像头的三维平移 t 和旋转 R 参数)。


两摄像头之间的旋转矩阵和平移矩阵可以由下式求出:


51986ab26fb343968bbae1ae0966289e.png


其中,R为两摄像头间的旋转矩阵,T为两摄像头间的平移矩阵。Rr为右摄像头经过张氏标定得到的相对标定物的旋转矩阵,Tr为右摄像头通过张氏标定得到的相对标定物的平移向量。Rl为左摄像头经过张氏标定得到的相对相同标定物的旋转矩阵,Tl为左摄像头经过张氏标定得到的相对相同标定物的平移向量。


我们在直观上感受下旋转矩阵和平移矩阵的意义:


对于R,首先用T把左摄像机坐标系平移到右摄像机坐标系上(即两坐标系远点重合)。然后在同一参考系下的两个旋转矩阵相乘,表示世界坐标先向右旋转到Rr ,再向左旋转Rl。那么两次旋转后得到的旋转,就是右摄像机旋转到左摄像机所需的旋转矩阵R。


对于T,先用R对左坐标系旋转一下,把左右两摄像机调成平行,然后直接平移向量相减,即得到。两摄像机之间的平移向量T。


得到双目标定的结果,我们就可以进行立体校正,立体匹配,三维重建的内容。


总结:


1.相机标定的意义


建立世界坐标系和像素坐标之间的关系,可用于三维重建,图像校正等


2.成像原理


小孔成像


3.相机成像模型


世界坐标系:目标物体位置的参考系,是为了更好的描述相机的位置创建的


相机坐标系:站在相机角度的坐标系


图像坐标系:以图像中心为原点的坐标系


像素坐标系:以图像左上角为原点的坐标系


坐标系之间的转换:刚体变换-- 透射变换—离散化


内参:描述相机内部属性的参数


外参:决定相机坐标与世界坐标系之间相对位置关系


4.图像畸变


径向畸变:沿着透镜半径方向产生的畸变


切向畸变:透镜本身与相机传感器平面或图像平面不平行而产生


5.相机标定方法分类


传统的标定方法,自标定法,基于主动视觉的标定方法


6.张氏标定法


利用棋盘格图像对相机进行标定:单应性矩阵,利用约束条件求解内参矩阵,根据内参矩阵估计外参矩阵,利用极大似然方法估计参数,优化方法:牛顿法,高斯牛顿法和LM算法


标定流程:


1.打印一张棋盘格标定图纸,将其贴在平面物体的表面.


2.拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现。


3.对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点。


4.因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到单应性矩阵H,得到相机的内参,外参等信息。


7.双目校正


双目较正,就是利用单目校正得到每个相机的参数后,在计算两个相机之间的相对位置。

目录
相关文章
|
7月前
标定系列三、9点标定实际应用场景分析
标定系列三、9点标定实际应用场景分析
210 0
|
7月前
三维手部关键点
三维手部关键点
|
7月前
|
编解码 机器人
标定系列一、手眼标定基础介绍
标定系列一、手眼标定基础介绍
254 0
|
7月前
|
机器学习/深度学习 算法 前端开发
高速公路表面图像裂缝检测程序
高速公路表面图像裂缝检测程序
|
机器学习/深度学习 传感器 编解码
【雷达成像】基于BP成像方式模拟飞机雷达正侧视或斜视模式下对地面目标成像附matlab代码
【雷达成像】基于BP成像方式模拟飞机雷达正侧视或斜视模式下对地面目标成像附matlab代码
【雷达成像】基于BP成像方式模拟飞机雷达正侧视或斜视模式下对地面目标成像附matlab代码
|
存储 传感器 数据可视化
使用激光雷达检测地平面和障碍物
通过分割地平面并查找附近的障碍物来处理来自安装在车辆上的传感器的 3-D 激光雷达数据。这可以促进车辆导航的可驾驶路径规划。该示例还演示如何可视化流式激光雷达数据。
195 0
|
传感器 编解码 算法
【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)
【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)
110 0
|
自动驾驶 算法 Python
车道线识别(附代码)
车道线识别(附代码)
车道线识别(附代码)
|
机器学习/深度学习 传感器 编解码
【车道线检测】基于计算机视觉实现车道线视频检测附matlab代码
【车道线检测】基于计算机视觉实现车道线视频检测附matlab代码
|
传感器 算法 智慧交通
智慧交通day03-车道线检测实现02-1:相机校正
我们所处的世界是三维的,而照片是二维的,我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。
167 0