双目视觉笔记

一、首先从单目标定说起

传统的摄像机标定方法, 都需要使用 3D 立体标靶,制作成本高,且加工精度受到一定的限制。 基于2D 平面标靶的摄像机标定方法,只要求摄像机在不同方位拍摄一个平面标靶,能够满足嵌入式视觉系统中标定方法灵活、快速的要求。

在计算机视觉中,平面的单应性被定义为从一个平面到另一个平面的投影映射。因此一个二维平面上的点映射到摄像机成像仪上的映射就是平面单应性的例子。

成像仪上的点为q,棋盘格上的点为Q,

其单应性简单地表示为

参数s是一个任意尺度比例(目的是使得单应性被定义到该尺度比例)。通常根据习惯放在H的外面。

H有两部分:用于定位观察的物体平面(棋盘格)到摄像机坐标系的物理变换(刚体变换)、摄像机内参数(投影矩阵)。


实际上关注的不是三维空间的Q,而是平面坐标Q(因为Z=0),因此进行简化:

。所以单应性矩阵:

。H是3*3矩阵。

使用同一物体的多个图像来计算每个视场的旋转和平移,同时也计算摄像机的内参数(对所有视场不变)。旋转和平移分别用3个角度和3个偏移量定义,因此对每个视场,有6个未知量。一个已知平面物体能提供8个方程,即映射一个正方形到四边形可以用4个(x,y)点来描述(无论在一个平面上检测到多少个角点,我们只能得到4个有用的角点信息)。每个新的图像帧为计算新的6个未知量提供8个方程,因此若给足够多个视场的图像,就能计算出摄像机内参数。

 

分析:

1个视场:

8个方程,6+4=10个未知量

2个视场:

16个方程,6+4+6=16个未知量,因此最少两个视场,两幅图像即可求解所有的未知量:内参与所有的外参。

用多于2个视场的多幅图像进行求解的目的是消除噪声,保证稳定性---利用最小二乘法。

综上所述:

基于2D靶标的平面标定:

标定过程分为三步:

①  利用多个视场,计算靶标平面与图像平面之间的映射矩阵,不考虑摄像机的成像模型,只是根据平面靶标坐标点和对应的图像坐标点的数据,利用最小二乘法得到所有的未知量:

目标函数为:实际图像坐标与根据式计算出的图像坐标之间的残差

②  求解摄像机的参数矩阵:由计算得到的标靶平面和图像平面的映射矩阵(单应性矩阵H)得到与摄像机内部参数相关的基本方程关系,求解方程得到摄像机内部参数

③  然后考虑镜头的畸变模型, 将上述解方程获得的内部参数作为初值, 进行非线性优化搜索, 从而计算出所有参数的准确值


单目标定结果:矩阵M里涉及的一些参数:fx、fy、cx、cy,以及畸变参数:k1、k2、p1、p2、k3(k3适用于鱼眼镜头)   p1、p2表示切向,其余是径向参数。

二、下面可以进行双目标定了

根据三角测量原理:在双目立体视觉系统中, 标定除了要得到各个摄像机的内部参数外, 还要知道两台摄像机之间的相对位置关系, 获得系统的结构参数: 旋转矩阵 R 和平移矢量T。设双目视觉系统左右摄像机的外部参数分别为 Rl、Tl 与 Rr、Tr, 即 Rl、Tl 表示左摄像机与世界坐标系的相对位置, Rr、Tr 表示右摄像机与世界坐标系的相对位置。因此, 对于空间任意一点, 如果在世界坐标系、左摄像机坐标系和右摄像机坐标系中的坐标分别为 xw、xl、xr, 则有: xl=Rl*xw+Tl, xr=Rr*xw+Tr。 因此, 两台摄像机之间的相对几何关系可以由下式表示: R = Rr(Rl)T=Rr(Rl)-1, T=Tr—R*Tl.

上述原理就是分别求:A到C的刚体变换,B到C的刚体变换。则A到B的刚体变换也就知道了。


Levenberg-Marquardt优化算法,它是使用最广泛的非线性最小二乘算法,中文为列文伯格-马夸尔特法。它是利用梯度求最大(小)值的算法,形象的说,属于“爬山”法的一种。

双目标定结果:两个单目标定结果、两摄像机间的结构参数:R、T。

立体成像的基本几何学就是对极几何:


本质矩阵(又叫本征矩阵)E与基本矩阵(又叫基础矩阵)F:

本质矩阵包含在物理空间中的两个摄像机相关的旋转和平移信息,基本矩阵除了包含E的信息外还包含了两个摄像机的内参。由于F包含了这些内参,因此可以在像素坐标系将两台摄像机关联起来。

E和F的区别:

E是单几何意义上的,与成像仪无关,它将左摄像机观测到的点的物理坐标与右摄像机观察到的相同点的位置关联起来。

F将一台摄像机的像平面上的点在图像坐标系(像素)上的坐标和另一台摄像机的像平面上的点关联起来。

,为两相机间的结构参数为R、

F可用来计算极线方程。即已知了F,便可求极线。



三、立体视觉:

双目视觉测量通用的方法:


一旦进行了立体标定,既可以进行上面的步骤1:消除畸变。下面进行立体校正

虽然不进行校正也能用三角测量原理求解三维信息,但是在求左右图对应点的像素坐标的时候会比较困难,即立体匹配比较困难。

当两个像平面是完全的行对准时,立体匹配最简单,计算立体视差是最简单的。这就是立体校正的目的。要利用上面标定得到的两摄像机结构参数R、T(转动右摄像机使得与左摄像机光轴水平、平行对准)或者基本矩阵F进行校正。


使用Bouguet算法可得到重投影矩阵。



立体校正以后就可以很方便地进行立体匹配:寻找同一目标点在左右图像中的对应点。

下面是立体匹配

OpenCV使用的是块匹配立体算法,使用“绝对误差累计”的小窗口(SAD,sum absolute difference)来查找左右两幅立体校正图像之间的匹配点。这个算法只查找两幅图像之间的强匹配点(强纹理),因此,在一个强纹理场景中(例如出现在森林户外),每个像素都有可计算的深度。而在弱纹理场景里(比如室内的走廊),则只需要计算少数点的深度。对于处理非畸变的校正立体图像,块匹配算法有三个步骤:


注意:当视差接近0时,微小的视差变化会导致很大的深度变化;当视差较大时,微小的视差变化几乎不会引起深度多大的变化。因此,立体视觉系统仅仅对于物体与摄像机相距较近时具有较高的深度精度。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值