10.4 分层重建
来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 10 章 3D Reconstruction of Cameras and Structure,10.4 小节 Stratified reconstruction。
这一节讲的是如何把 10.3 射影重建 逐步升级:
projective reconstruction
-> affine reconstruction
-> metric reconstruction
这条路线叫做 stratified reconstruction,中文可理解为“分层重建”。
本节核心
两视图未标定重建一开始只能得到射影重建:
它和真实欧氏重建之间相差一个未知的三维射影变换:
分层重建的目标是逐步减少 的自由度:
| 阶段 | 需要识别的几何对象 | 重建歧义 |
|---|---|---|
| projective | 无 | 射影变换 |
| affine | 无穷远平面 | 仿射变换 |
| metric | 绝对二次曲线 | 相似变换 |
直观地说:
- 找到 ,就恢复了“哪些方向是平行的”。
- 找到 ,就进一步恢复了“角度和长度比例”。
10.4.1 从射影重建到仿射重建
仿射重建的关键是定位无穷远平面:
原因是:仿射几何和射影几何的区别,正是是否知道哪个平面是无穷远平面。
如果我们在当前射影重建的坐标系中识别出某个平面 ,并知道它对应真实世界的无穷远平面,那么就可以把它变换到标准位置:
完成这一步之后,重建就不再只是射影重建,而是仿射重建。
用 H 把无穷远平面放回标准位置
设当前射影坐标系中的无穷远平面为:
目标是找一个三维射影变换 ,使得平面按如下方式变换:
如果 ,可以使用如下形式的矩阵:
然后对三维点和相机做同样的升级:
这一步只保证无穷远平面的位置正确。得到的结果和真实欧氏结构之间仍然可能差一个仿射变换。
为什么这是仿射重建
当 已经被放到正确位置后,剩余的不确定变换必须保持 不动。
保持无穷远平面不动的射影变换,正是仿射变换。
因此,此时重建结果与真实结构之间只差:
这意味着我们已经恢复了仿射性质,例如:
- 平行性。
- 线段中点。
- 一组点的质心。
- 同一直线上的长度比例。
- 线和平面之间的平行关系。
但还不能恢复:
- 角度。
- 垂直关系。
- 真实长度比例。
- 圆、球等度量性质。
如何找到无穷远平面
书中给出几类可以识别 的额外信息。
纯平移相机运动
如果两台相机之间只有平移,没有旋转,并且内参不变,那么可以得到仿射重建。
直观原因是:无穷远点在纯平移下投影位置不变。
例如人在直路上向前移动时,近处物体明显移动,但非常远的物体几乎不动。这种“不动”的方向信息对应无穷远平面上的点。
在纯平移情形下,可以选择仿射相机:
基础矩阵具有特殊形式:
这说明纯平移不是普通两视图情形,而是带有额外运动约束的情形。实际求解时应该利用 的特殊反对称结构。
场景中的平行线
如果场景中有三组不同方向的平行线,也可以确定无穷远平面。
原因是:一组真实平行线在三维空间中相交于同一个无穷远点。
每一组平行线给出一个无穷远点:
只要三组方向不同,这三个无穷远点就能确定一个平面:
这也是建筑场景中常用的思路:墙边、窗框、屋顶边缘等经常提供多组平行线。
在有噪声的真实图像中,原本应该相交的空间线通常不会精确相交。因此实际计算不能简单用两条线硬求交点,而需要鲁棒估计和优化。
单张图中的消失点也有用
不一定要在两张图中都直接找到同一个消失点。
假设第一张图中由平行线得到消失点:
第二张图中有对应方向的一条图像线:
由于消失点也满足对极约束,第二张图中的对应消失点 位于:
这条对极线上,同时又位于 上。因此:
再由两视图中的消失点对应,可以在当前重建中三角化出无穷远点。
已知直线上的长度比例
如果知道同一直线上几个点之间的仿射长度比例,也可以确定该直线方向上的无穷远点。
典型例子:
- 三个点等间距。
- 两段线段长度比已知。
- 建筑立面上重复结构间隔相同。
一旦能从图像中确定某个方向的无穷远点,多个不同方向的无穷远点就能共同确定 。
已知某个相机是仿射相机
如果已知某个相机可以近似看作 affine camera,那么也可以完成射影到仿射的升级。
仿射相机的 principal plane 正是无穷远平面。
相机矩阵的 principal plane 对应它的第三行。因此,如果某个相机已知为仿射相机,就可以把该相机的 principal plane 作为 来使用。
真实相机严格来说不是仿射相机。仿射相机只是当场景深度变化远小于相机到场景距离时的近似模型。
无穷远单应 H∞
一旦得到仿射重建,就可以定义两幅图像之间的无穷远单应:
它表示这样一个映射:
- 第一张图中的点 反投影成空间射线。
- 射线与无穷远平面 相交。
- 该无穷远点再投影到第二张图,得到 。
于是:
如果仿射重建中的两台相机为:
那么:
特别地,如果选择:
则:
反过来,如果已经知道 ,也可以选择仿射相机:
这说明:
10.4.2 从仿射重建到度量重建
度量重建的关键是识别绝对二次曲线:
它位于无穷远平面 上。
所以一旦识别出 ,也就隐含识别了 。
在分层路线中,我们通常已经有了仿射重建,也就是已经知道 。接下来只需要在无穷远平面上进一步确定 。
为什么 Ω∞ 给出度量信息
射影变换会破坏角度和长度比例。
但如果一个变换保持绝对二次曲线 不变,那么它只能是相似变换:
因此,一旦把当前重建中的 变换到标准欧氏位置,重建就升级为 metric reconstruction。
此时保留下来的歧义只剩:
也就是无法确定绝对位置、朝向和整体尺度,但可以确定角度和长度比例。
用 IAC 升级到度量重建
实践中常用的是绝对二次曲线在图像中的投影,称为 image of the absolute conic,简称 IAC:
假设我们已经有仿射重建,某个相机写作:
并且知道该图像中的 IAC 为 。
那么可以用如下仿射变换把重建升级为度量重建:
其中 满足:
通常可以通过 Cholesky 分解求出 。
如果 不是正定矩阵,就无法按这种方式得到有效的 。这通常意味着约束、估计或数据存在问题。
IAC 和相机内参 K 的关系
IAC 只依赖相机内参,不依赖相机位置和朝向。
如果相机内参矩阵为 ,则:
等价地:
因此,如果知道 ,可以反推出 ;如果知道或部分知道 ,也可以约束 。
常见内参约束包括:
- zero skew:
- square pixels:
这些约束可以和场景约束、多视图约束一起使用。
如何得到 IAC 的约束
书中列出三类常见来源。
场景正交性
如果两组场景直线在三维中互相垂直,它们在图像中对应两个消失点:
则它们对 IAC 给出一个线性约束:
如果一个方向与某个平面垂直,图像中对应一个消失点 和一条消失线 ,则有:
典型例子是:竖直方向的消失点与水平地面的消失线互相约束。
已知或部分已知的相机内参
如果知道相机内参 ,就直接知道:
如果只知道部分内参,也能提供部分约束。
例如:
- skew 为 0。
- 像素是正方形。
- 主点近似在图像中心。
- 焦距在某个范围内。
这些都能帮助确定 。
多张图使用同一相机
如果两张图由同一台相机拍摄,并且内参不变,那么两张图中的 IAC 相同:
又因为绝对二次曲线位于无穷远平面上,它在两张图像之间可以通过无穷远单应转移:
如果 ,就得到:
这会对 的元素形成线性约束。
单靠同一相机约束通常还不够完全确定 ,但它可以和 square pixels、zero skew、正交消失点等约束结合起来。
10.4.3 直接使用 IAC 做度量重建
前面讲的是:
projective -> affine -> metric
但如果已经知道每张图中的 IAC,也可以更直接地走向度量重建。
一种做法是:
- 由 计算相机内参 。
- 使用已标定相机方法,计算 essential matrix。
- 从 essential matrix 恢复相机姿态。
- 三角化三维点,得到度量重建。
因为:
所以可以通过矩阵分解从 得到 。
不过从 essential matrix 恢复相机姿态时,通常会出现多个候选解,需要用点是否位于相机前方来排除错误解。
另一种直接理解
也可以从三维角度理解。
已知两台射影相机:
以及两张图像中的 IAC:
把图像中的二次曲线反投影回三维,会得到两个二次锥。它们的交线中包含绝对二次曲线 。
一旦确定 ,它所在的支撑平面就是:
于是仿射和度量结构都被确定。
书中提醒:两个二次锥一般可能给出两个候选的平面二次曲线,这对应两视图重建中的 twisted pair ambiguity。
分层重建的整体图
可以把 10.4 总结成:
点对应
-> F
-> projective reconstruction
-> 找到 π∞
-> affine reconstruction
-> 找到 Ω∞ 或 IAC ω
-> metric reconstruction
每一步都在加入额外信息:
| 升级 | 额外信息 | 获得的能力 |
|---|---|---|
| projective -> affine | 或 | 平行、中点、质心、仿射比例 |
| affine -> metric | 或 | 角度、垂直、长度比例、形状 |
和 10.3 的关系
10.3 告诉我们:从未标定两视图只能恢复到一个未知射影变换 。
10.4 讨论如何逐步限制这个 :
- 找到 ,把 从一般射影变换限制为仿射变换。
- 找到 ,把剩余仿射变换限制为相似变换。
所以分层重建不是重新做一套重建,而是在已有射影重建上逐层加入约束。
本节记忆点
- stratified reconstruction 的路线是:
projective -> affine -> metric
- 从射影到仿射的关键是识别无穷远平面 。
- 从仿射到度量的关键是识别绝对二次曲线 或它的图像 。
- 纯平移、三组平行线、已知长度比例、仿射相机假设都可能帮助确定 。
- 场景正交性、相机内参约束、同一相机多视图约束都可能帮助确定 。
- 无穷远单应 等价于图像层面的 信息。
- IAC 满足:
- 度量重建仍然不能恢复绝对位置、朝向和尺度,只能恢复到相似变换。
后续问题
进入 10.5 时可以重点关注:
- 如果有已知三维坐标的控制点,能否直接从射影重建跳到度量重建?
- 至少需要几个 ground control points?
- 直接方法和分层方法相比,各自适合什么场景?