【MV】Stereo Vision 1: Fundamentals of Multiple View Geometry
文章目录
- 1、多视几何
- 2、三角化(Triangulation)
- 3、双目立体视觉原理
1、多视几何
图注:同一三维点 (X) 在不同相机中的投影满足( x i = K i [ R i ∣ t i ] X ) (x_i=K_i[R_i\mid t_i]X)(xi=Ki[Ri∣ti]X),每幅图像对应独立的内参与外参。
图注:多相机拥有各自的坐标系,旋转 (R) 和平移 (t) 描述相机之间的位姿关系。
图注:多个空间点在各视图中形成对应特征;相机视场需要有重叠区域,才能建立可靠匹配。
图注:同名特征在多幅图像中的位置,为联合估计相机位姿和场景结构提供约束。
图注:运动恢复结构(Structure from Motion,SfM)从多视角图像中恢复相机位姿和稀疏三维点云。
多视角图像,相机位姿+场景结构
图注:Photo Tourism 利用大量游客照片重建地标点云,同时估计每张照片的拍摄位置和方向。
2、三角化(Triangulation)
形成一个三角形
图注:三角化已知匹配点、相机内参和位姿,通过两条反投影射线求三维点;理想无噪声时两条射线相交。
图注:受标定和匹配误差影响,两条射线通常不严格相交,可取两条射线公垂线的中点作为近似三维点。
两条直线之间存在唯一的一条最短连线。这条最短连线:同时垂直于两条直线。它就是公垂线。
| 场景 | 最短距离 |
|---|---|
| 点到直线 | 垂线 |
| 平行直线 | 任意垂线 |
| 异面直线 | 公垂线 |
图注:多视三角化常通过最小化所有视图的重投影误差平方和,求取更稳定的三维点。
求出来 X,重新投影回图片,离真实角点,还有几像素误差
Q:为什么叫重投影
第一次投影:
真实世界
棋盘格 │ ▼ 相机 │ ▼ 图像这是现实发生的。
第二次投影:
现在已经知道
K R t Dist于是再把世界点 X 重新投影一次:
X ↓ K ↓ R t ↓ 畸变 ↓ 理论像素 x因为这是"重新"投影。
所以叫:Re-projection(重投影)
图注:三角化可用于无人机测绘:不同航拍视角共同恢复地表或建筑物的三维模型。
3、双目立体视觉原理
图注:本节从一般多视几何进入双目立体视觉,重点讨论两台相机的深度恢复方法。
图注:双目系统用左右相机观察同一场景,根据对应点的位置差恢复物体的深度和三维形状。
图注:工业双目相机可输出高度图或点云;工作距离、基线和成像分辨率共同影响测量范围与精度。
图注:双目视觉可由两台固定相机组成,也可由一台相机移动后形成两个视点,前提是两次观测具有公共区域。
双目立体视觉的基本原理与人眼观察世界的方式类似,双目立体视觉获取图像时通过不同位置的两台摄像机或者一台摄像机经过平移或旋转拍摄同一幅场景,来获取立体图像对。
图注:人眼分别获得略有差异的左右图像,大脑利用这种差异形成对场景深度和前后关系的感知。
图注:视差(disparity)是同一空间点在左右图像中的位置差,是双目深度计算的核心观测量。
视差是解释原理的基本概念之一。
图注:图像经过极线校正后,对应点位于同一水平扫描线上,视差可写为d = x l e f t − x r i g h t d=x_{left}-x_{right}d=xleft−xright
同一个物品,应该位于左图的右边,右图的左边,所以是x l e f t − x r i g h t x_{left} - x_{right}xleft−xright
图注:双目处理流程是采集左右图像、寻找对应点并计算视差,最后把视差转换成深度或三维点云。
图注:双目相机可采用横向平行或会聚安装;两种模式的有效重叠区域和后续极线校正方式不同。
双目横向平行模式
双目横向会聚模式
图注:双目三角测量的主要变量包括焦距 (f)、基线 (B)、左右像点坐标以及待求世界点( X , Y , Z ) (X,Y,Z)(X,Y,Z)。
图注:平行模式下两条光轴方向一致;会聚模式下光轴向目标区域相交,通常需要先校正成便于匹配的标准形式。
图注:校正后的简化双目模型把左右相机中心放在同一基线上,用两个投影位置共同确定点P PP的深度。
图注:图中在X − Z X\!-\!ZX−Z平面推导双目几何,基线沿X XX轴,Y YY轴垂直于示意图平面向外。
图注:左右投影坐标x L ∗ x_L^*xL∗和x R ∗ x_R^*xR∗的差定义为视差 (d),它随目标深度变化。
图注:利用相似三角形,可把基线、焦距、视差和深度联系起来,为深度公式的推导做准备。
图注:右相机坐标需减去基线偏移,转换到与左相机一致的坐标系后才能直接比较投影位置。
图注:在平行、等焦距且完成校正的模型下,相似三角形最终得到经典深度关系Z = f B / d Z=fB/dZ=fB/d。
推导过程如上图箭头所示
图注:用针孔投影矩阵也能推出同一结论:深度与焦距、基线成正比,与视差成反比。
左相机坐标系O c O_cOc,右相机坐标系O c ′ O_c'Oc′
两个相机之间距离t x t_xtx,实际上就是Baseline(基线),通常记为B BB
一个三维点在左相机坐标系里坐标是( x c , y c , z c ) (x_c,y_c,z_c)(xc,yc,zc)
在右相机坐标系里坐标变成( x c ′ , y c ′ , z c ′ ) (x_c',y_c',z_c')(xc′,yc′,zc′)
由于两个相机只是左右平移,所以z c ′ = z c z_c'=z_czc′=zc,y c ′ = y c y_c'=y_cyc′=yc,只有x xx变了。
上面推导核心
展开第一个公式的第一行
z c z_czc是等于z c ′ z_c'zc′的,因为世界坐标系下(立体校正后),到左右相机的距离 z 相等
x c ′ = x c − t x x_c' = x_c - t_xxc′=xc−tx,
左坐标系 0---------------------> x 右坐标系 0-------------->右相机
整体向右平移了t x t_xtx
因此同一个物体。在右坐标系看来坐标会减去这一段。
深度一定要取正,求绝对值
图注:推导假设左右相机已经校正,光轴平行且对应点深度一致,此时水平视差即可直接用于求深度。
图注:实际系统的关键问题是标定与校正误差、左右图像匹配误差,以及远处目标视差过小导致的深度误差放大。