一般立体视觉的步骤
-
找到八组或更多的初始匹配点组
-
利用8点法计算基础矩阵F
- 从基础矩阵F推导出对极几何(极点,极线等)
- 矫正图像,从而获取简单的扫描线立体匹配图像对
- 计算视差图(对应匹配)
6. 从视差图中计算 3D 表面几何
重建
即使我们有一个稠密的视差图,当谈到恢复三维场景结构时,我们只将其考虑为一组点匹配。
点匹配:
在左图像中的(u, v) 匹配在右图像中的(u-d, v)
立体重建
给定一组匹配点,如何利用三角化(triangulation)计算三维点的位置。
结果取决于系统的矫正方式:
-
已知内参和外参
可以计算公制三维几何图形 -
只知道内参
尺度因子未知 -
内参和外参均不知道
将结构恢复到场景的一个未知投影变换
1、全矫正立体视觉(Fully Calibrated Stereo,已知内参和外参)
内参已知——能够在相机坐标系中计算观察射线(viewing rays)
外参已知——知道两个相机的光线在三维空间中的位置
重建:观察射线的三角化
矫正的三角化
理想地,P 是以下两个三维射线的交叉点
沿着 Pl 方向穿过 Ol 的射线
沿着 PTPr 方向穿过 Or 的射线
有噪声的三角化
不幸的是,由于点位置和校准参数的噪声,这些射线通常不相交于P
解决方法:选择 P 作为“伪交点”。这是使两条射线的平方距离之和最小的点。(如果光线完全相交,则SSD为0)
解法
P是垂直于 Pl 和 RTPr 的线段的中点
令
w垂直于两条射线
引入三个未知的比例因子a,b,c,我们注意到我们可以写出“回路”的方程
用未知数a,b,c写出向量的“回路图”
注:这是含有三个未知数a, b, c的三个线性方程,所以可以解a,b,c
找到a,b,c后,求出 Ol+a Pl 点与 Ol+T+b RT Pr 点之间的线段的中点
另一种解法
我更喜欢另一种解决方案,基于使用最小二乘法来解决一个未知点P,使观察射线的SSD最小化。为什么?它很容易推广到N个摄相机。
2、只知道内参的情况
利用 E=R S 可以求解 R 和 T ,然后使用前面的三角化方法。
注:由于 E 的定义局限于尺度因子(尺度等价性),我们只能确定平移 T 的方向,而不能确定其长度(T也有尺度等价性,具有一个尺度)。所以。。。三维重建将有一个未知的尺度。
利用本质矩阵 E 计算外参 R 和 T,其中 E=R S 的 S 的元素是 T 的函数(反对称矩阵)
然后 ET E = ST RT R S = ST S (因为RTR = I)
因此 ETE只是一个 T 的函数
假设 T 为一个单位向量,让它的长度为1,然后解出 T(归一化求解)
确定 T 之后,代回入 E = RS ,然后确定 R
只知道内参的情况
不幸的是,(R,T)有四种不同的解(由于E的符号选择问题,并且在求解过程中T的符号选择问题)。
然而,当用于三角化测量时,只有一个选择会给出一致的解决方案,其中的一致意味着重建点在相机前面(Z坐标是正的)。
因此,检查所有的四种解,选择正确的一个
3、内参和外参均不知道
我们只是看到了两张没有事先信息的照片
我们不能恢复三维信息
当然,我不是什么都不知道
我们知道对应点组,因此我们能够计算基础矩阵 F
解法:利用基础矩阵 F 的知识,并且利用场景中的5个点定义一个任意的投影坐标系。这些点将具有坐标:(1 0 0 0)(0 1 0 0)(0 0 1 0)(0 0 0 1)(1 1 1 1)
结果:可以恢复其他点相对于此投影坐标系的三维位置。
为什么这是有实际意义的?因为通常,可以使用其他信息来确定这个任意投影坐标系与“真实”欧氏场景坐标系的关联关系。比方说,利用世界中某些物品(如房屋)的长度和角度作为先验知识