【多视图几何】TUM 课程 第6章 多视图重建
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 。视频评论区可以找到课程所使用课件与练习题的下载地址。
课程第6章介绍从多张影像重建同名点三维空间坐标的方法,详细讲解线性系统的秩与现实世界的对应关系。
1. 从双视图到多视图
双视图对一个空间点只能提供四个测量值(左右影像的 \(x, y\)),三视图能够提供六个测量值,多视图能够提供更多的测量值,对空间点的三维坐标有更大的约束,所以能够得到更精确的结果。
一般而言,实际使用的大多是三视图重建,而不会选择使用四视图、五视图。。。这是一个效率上的问题。
2. 多视图的原像与余像
同名点或者同名线在多张影像上的原像(Preimage)是其在各影像上原像的交集。
\[ preimage(\mathbf{x_1}, \dots, \mathbf{x_m}) = preimage(\mathbf{x_1}) \cap \dots \cap preimage(\mathbf{x_n}) \]
\[ preimage(\mathscr{l_1}, \dots, \mathscr{l_m}) = preimage(\mathscr{l_1}) \cap \dots \cap preimage(\mathscr{l_m}) \]
双视图中点与线的原像(图片来源于 TUM 课程 Slides):
考虑在多视图中点与线的投影关系,以得到在多视图中的约束关系。
假设有一空间点 \(\mathbf{X}\) 在时刻 \(t\) 的影像上的坐标为 \(\mathbf{x}(t)\),对于时刻 \(t\) 能够列出以下方程:
\[ \lambda(t)\mathbf{x}(t) = K(t) \Pi_0g(t)\mathbf{X} \]
对于空间中一直线 \(L\),该直线可以用集合表示:
\[ L = \left\{ \mathbf{X} \left.\right| \mathbf{X} = \mathbf{X_0} + \mu \mathbf{V}, \mu \in \mathbb{R} \right\} \subset \mathbb{R}^4 \]
其中 $ \mathbf{X_0} = {\begin{bmatrix} X_0, Y_0, Z_0, 1 \end{bmatrix}}^T \in \mathbb{R}^4 $ 是基础点 \(p_0\),表示线所在的位置;$ \mathbf{V} = {\begin{bmatrix} V_1, V_2, V_3, 0 \end{bmatrix}}^T \in \mathbb{R}^4 $ 表示线的方向。
对于直线 \(L\) 在时刻 \(t\) 的影像上的坐标可以用 \(\mathscr{l}(t)\) 表示,\(\mathscr{l}(t)\) 向量与直线在 \(t\) 时刻影像上的像中的任意点 \(\mathbb{x}(t)\) 垂直:
\[ \mathscr{l}(t)^T \mathbf{x}(t) =\mathscr{l}(t)^TK(t)\Pi_0g(t)\mathbf{X} = 0 \]
整理一下,将时刻 \(t\) 离散化,只有时刻 \(t_1, \dots, t_m\) 对应 \(m\) 张影像,令 \(\Pi_i = K(t_i)\Pi_0g(t_i)\),结合线 \(L\) 的集合表达(\(\mathbf{X_0}\) 与 \(\mathbf{V}\) 线性无关):
\[ \mathscr{l}_i^T\Pi_i\mathbf{X_0} = \mathscr{l}_i^T\Pi_i\mathbf{V} = 0 \]
3. 原像与秩约束
3.1 点
\(\mathbf{X}\) 在 \(m\) 张影像上的像平面坐标系坐标为 \(\mathbf{x_1}, \dots, \mathbf{x_m}\),每一张影像都能列出
\[ \lambda_i\mathbf{x_i} = \Pi_i\mathbf{X} \]
整合成一个式子
\[ \mathscr{I} \vec{\lambda} \equiv {\begin{bmatrix} \mathbf{x_1} & 0 & \dots & 0 \\ 0 & \mathbf{x_2} & \dots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \dots & \mathbf{x_m} \end{bmatrix}} {\begin{bmatrix} \lambda_1 \\ \lambda_2 \\ \vdots \\ \lambda_m \end{bmatrix}} = {\begin{bmatrix} \Pi_1 \\ \Pi_2 \\ \vdots \\ \Pi_m \end{bmatrix}} \mathbf{X} \equiv \Pi\mathbf{X} \]
即
\[ \mathscr{I}\vec{\lambda} = \Pi\mathbf{X} \]
\[ \mathscr{I} \in \mathbb{R}^{3m \times m}, \quad \vec\lambda \in \mathbb{R}^m, \quad \Pi \in \mathbb{R}^{3m \times 4} \]
这种形式还是不可以,因为不是 \(Ax = 0\) 的形式,不能用线性代数求解,引入新的矩阵 \(N_p\) 与向量 \(u\):
\[ N_p \equiv \begin{bmatrix} \Pi, \mathscr{I} \end{bmatrix} = {\begin{bmatrix}\ \Pi_1 & \mathbf{x_1} & 0 & \dots & 0 \\ \Pi_2 & 0 & \mathbf{x_2} & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \Pi_m & 0 & 0 & \dots & \mathbf{x_m} \end{bmatrix}} \in \mathbb{R}^{3m \times (m+4)} \]
\[ u \equiv \begin{bmatrix} \mathbf{X} \\ -\vec\lambda \end{bmatrix} \in \mathbb{R}^{m+4} \]
于是式子简化为
\[ N_p u = 0 \]
其实还可以继续简化(-_-||),把 \(\vec\lambda\) 去掉。引入一个能够去除 \(\mathscr{I}\) 的矩阵 \(\mathscr{I}^{\bot}\):
\[ \mathscr{I}^{\bot} = \begin{bmatrix} \hat{\mathbf{x_1}} & 0 & \dots & 0 \\ 0 & \hat{\mathbf{x_2}} & \dots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \dots & \hat{\mathbf{x_m}} \end{bmatrix} \in \mathbb{R}^{3m \times 3m} \]
简化后
\[ \mathscr{I}^{\bot}\Pi\mathbf{X} = 0 \]
不能简化了。。。
新定义一个矩阵 \(W_p\) 方便讨论:
\[ W_p \equiv \mathscr{I}^{\bot}\Pi = \begin{bmatrix} \hat{\mathbf{x_1}}\Pi_1 \\ \hat{\mathbf{x_2}}\Pi_2 \\ \vdots \\ \hat{\mathbf{x_m}}\Pi_m \end{bmatrix} \in \mathbb{R}^{3m \times 4} \]
影像的数量 \(m \ge 2\),所以 \(W_p\) 的满秩是4,而 \(W_p\) 有一维 null space 是 \(\mathbf{X}\) ,于是得到 \(W_p\) 的秩的限制条件:
\[ rank(W_p) \le 3 \]
整理一下:
\[ rank(W_p) = rank(N_p) - m \le 3 \]
3.2 线
空间中直线 \(L\) 在 \(m\) 张影像中有 \(m\) 个像(或者说是余像,线在影像中的像就是用余像表达的嘛) \(\mathscr{l}_i, i = 1, \dots, m\),于是对于用基底 \(\mathbf{X_0}\) 和方向 \(\mathbf{V}\) 表达的直线有
\[ \mathscr{l}_i^T \Pi_i \mathbf{X_0} = \mathscr{l}_i^T \Pi_i \mathbf{V} = 0 \]
合并有
\[ W_l \equiv \begin{bmatrix} \mathscr{l}_1^T\Pi_1 \\ \mathscr{l}_2^T\Pi_2 \\ \vdots \\ \mathscr{l}_m^T\Pi_m \end{bmatrix} \in \mathbf{R}^{m \times 4} \]
\(W_l\) 的 null space 维度为2,所以当 \(m = 2\) 时,满秩为2,与列满秩4相差2,刚好能够求解得到两个 null space,解出的直线唯一。
要解出一条直线,需要
\[ rank(W_l) \le 2 \]
4. 几何理解
4.1 点
对于空间的一个点 \(\mathbf{X}\),列出线性系统
\[ W_p \mathbf{X} = 0, \quad W_p = \begin{bmatrix} \hat{\mathbf{x_1}}\Pi_1 \\ \hat{\mathbf{x_2}}\Pi_2 \\ \vdots \\ \hat{\mathbf{x_m}}\Pi_m \end{bmatrix} \in \mathbb{R}^{3m \times 4} \]
其中 $ \hat{\mathbf{x_i}} $ 的秩为2,\(W_p\) 中独立的行最多有 \(2m\) 个,每一个独立的行都定义了一个平面,空间点 \(\mathbf{X}\) 就是这 \(2m\) 个平面的交点(图片来源于 TUM 课程 Slides):
当 \(m=1\) 时,\(W_p\) 的秩为2,null space 的维度为2,空间点落在一条直线上,无法求解,可以想象一下单片的情况。
当 \(m=2\) 时,\(W_p\) 满秩为4,此时无解,但是如果 \(2m = 4\) 个平面中有两个平面重合,则 \(W_p\) 的秩为3,能够唯一解出一个 \(\mathbf{X}\)。
当 \(m \ge 3\) 时,\(W_p\) 满秩为4,此时要求 \(W_p\) 的秩为3,能够唯一解出 \(\mathbf{X}\)。
4.2 线
对于空间中的一条直线 \(L\) 列出线性系统:
\[ W_l = \begin{bmatrix} \mathscr{l}_1^T\Pi_1 \\ \mathscr{l}_2^T\Pi_2 \\ \vdots \\ \mathscr{l}_m^T\Pi_m \end{bmatrix} \in \mathbf{R}^{m \times 4} \]
当 \(m=1\) 时,\(W_l\) 的秩为1,null space 的维度为3,直线 \(L\) 落在一个平面上,无法确定。
当 \(m=2\) 时,\(W_l\) 满秩为2,null space 的维度为2,直线 \(L\) 可以被唯一确定,但这种确定没有任何意义,因为两个平面只要不是平行关系都能唯一确定一条交线。
当 \(m=3\) 时,\(W_l\) 满秩为3,null space 的维度为1,只能确定一个点了,所以需要 \(W_l\) 不满秩,其秩为2,能够唯一确定一条交线。
当 \(m \ge 4\),\(W_l\) 满秩为4,null space 的维度为0,无解,对 \(W_l\) 秩的要求同 \(m=3\) 的情形。
5. 多视图重建矩阵
现在考虑前面得到的矩阵的秩与普通极线约束之间的关系。
对于空间中的一个点,得到了矩阵 \(W_p\):
\[ W_p \equiv \mathscr{I}^{\bot}\Pi = \begin{bmatrix} \hat{\mathbf{x_1}}\Pi_1 \\ \hat{\mathbf{x_2}}\Pi_2 \\ \vdots \\ \hat{\mathbf{x_m}}\Pi_m \end{bmatrix} \in \mathbb{R}^{3m \times 4} \]
正常情况(\(n\ge2\))下,\(W_p\) 满秩是4,用一个满秩矩阵 \(D_p \in \mathbb{R}^{4 \times 5}\) 右乘它,结果的秩与 \(W_p\) 的秩相同:
\[ W_pD_p = \begin{bmatrix} \hat{\mathbf{x_1}}\Pi_1 \\ \hat{\mathbf{x_2}}\Pi_2 \\ \vdots \\ \hat{\mathbf{x_m}}\Pi_m \end{bmatrix} \begin{bmatrix} \hat{\mathbf{x_1}} & \mathbf{x_1} & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \hat{\mathbf{x_1}}\hat{\mathbf{x_1}} & 0 & 0 \\ \hat{\mathbf{x_2}}R_2\hat{\mathbf{x_1}} & \hat{\mathbf{x_2}}R_2\mathbf{x_1} & \hat{\mathbf{x_2}}T_2 \\ \hat{\mathbf{x_3}}R_3\hat{\mathbf{x_1}} & \hat{\mathbf{x_3}}R_3\mathbf{x_1} & \hat{\mathbf{x_3}}T_3 \\ \vdots & \vdots & \vdots \\ \hat{\mathbf{x_m}}R_m\hat{\mathbf{x_1}} & \hat{\mathbf{x_m}}R_m\mathbf{x_1} & \hat{\mathbf{x_m}}T_m \end{bmatrix} \in \mathbb{R}^{3m \times 5} \]
\(W_p\) 的秩的限制条件为 \(rank(W_p) \le 3\),于是有矩阵
\[ M_p \equiv \begin{bmatrix} \hat{\mathbf{x_2}}R_2\mathbf{x_1} & \hat{\mathbf{x_2}}T_2 \\ \hat{\mathbf{x_3}}R_3\mathbf{x_1} & \hat{\mathbf{x_3}}T_3 \\ \vdots & \vdots \\ \hat{\mathbf{x_m}}R_m\mathbf{x_1} & \hat{\mathbf{x_m}}T_m \end{bmatrix} \in \mathbb{R}^{3(m-1) \times 2 } \]
的秩 \(rank(M_p) \le 1\)。
\(rank(M_p) \le 1\) 的意思就是 \(M_p\) 的两列线性相关,于是:
\[ \lambda \hat{\mathbf{x_i}}R_i\mathbf{x_1} + \hat{\mathbf{x_i}}T_i = 0, \quad i = 1, 2, \dots, m\]
\[ M_p \begin{bmatrix} \lambda_1 \\ 1 \end{bmatrix} = 0 \]
6. 与极线约束的关系
其实上式中的 \(\lambda = \lambda_1\),是空间点在第一张影像中的景深。
上式即极线约束,证明如下:
\(\hat{\mathbf{x_i}}R_i\mathbf{x_1}\) 与 \(\hat{\mathbf{x_i}}T_i\) 线性相关,即 \(\mathbf{x_i} \times R_i\mathbf{x_1}\) 与 \(\mathbf{x_i}\times T_i\) 的方向一致,即可得出结论“\(\mathbf{x_i}, T_i, R_i\mathbf{x_1}\) 三条向量共面”,这就是极线约束的几何意义。
\[ \mathbf{x_i}^T(T_i \times R_i \mathbf{x_1}) = \mathbf{x_i}^T\hat{T_i}R_i\mathbf{x_1} = 0 \]
对于任意非零向量 \(a_i, b_i \in \mathbb{R}^3, i = 1, \dots, n\),矩阵 \[ \begin{bmatrix} a_1 & b_1 \\ a_2 & b_2 \\ \vdots & \vdots \\ a_n & b_n \end{bmatrix} \in \mathbb{R}^{3n \times}\] 非满秩(rank-deficient),当且仅当 \(a_i b_j^T - b_i a_j^T =0, \forall i, j = 1, \dots, n\)。
利用这个性质,对矩阵 \(M_p\) 可以写出
\[ \hat{\mathbf{x_i}}R_i\mathbf{x_1}(\hat{\mathbf{x_j}}T_j)^T - \hat{\mathbf{x_i}}T_i(\hat{\mathbf{x_j}}R_j\mathbf{x_1})^T = 0 \]
整理一下,得到三视图的极线约束(trilinear constraint):
\[ \hat{\mathbf{x_i}}(T_i\mathbf{x_1}^TR_j^T - R_i\mathbf{x_1}T_j^T)\hat{\mathbf{x_j}} = 0 \]
利用在双试图重建中的方法(克罗内克积)可以一步求得两张影像 \(i, j\) 相对于第一张影像的位姿,一个点能够提供9个方程,但其中仅有4个线性无关的方程(\(\hat{\mathbf{x_i}}\) 的秩为2)。
7. 多视图重建的求解算法
这是一个迭代的求解方法。
由 \(M_p\) 两个列向量线性无关得到了这个式子:
\[ M_p \begin{bmatrix} \lambda_1 \\ 1 \end{bmatrix} = 0 \]
除以一个 \(\lambda_1\),
\[ M_p \begin{bmatrix} 1 \\ \alpha \end{bmatrix} = 0, \quad \alpha = {1 \over \lambda_1} \]
采集了空间中 \(n\) 个点的影像,对于第 \(j\) 个点,能够列出下面的方程:
\[ \begin{bmatrix} \hat{\mathbf{x_2^j}}R_2\mathbf{x_1} \\ \hat{\mathbf{x_3^j}}R_3\mathbf{x_1} \\ \vdots \\ \hat{\mathbf{x_m^j}}R_m\mathbf{x_1} \end{bmatrix} + \alpha^j \begin{bmatrix} \hat{\mathbf{x_2^j}}T_2 \\ \hat{\mathbf{x_3^j}}T_3 \\ \vdots \\ \hat{\mathbf{x_m^j}}T_m \end{bmatrix} = 0 \]
对于第 \(i\) 张影像以及所有空间点:
\[ P_i \begin{bmatrix} R_i^s \\ T_i \end{bmatrix} = \begin{bmatrix} \mathbf{x_1^1} \otimes \hat{\mathbf{x_i^1}} & \alpha^1\hat{\mathbf{x_i^1}} \\ \mathbf{x_1^2} \otimes \hat{\mathbf{x_i^2}} & \alpha^2\hat{\mathbf{x_i^2}} \\ \vdots & \vdots \\ \mathbf{x_1^n} \otimes \hat{\mathbf{x_i^n}} & \alpha^n\hat{\mathbf{x_i^n}} \end{bmatrix} \begin{bmatrix} R_i^s \\ T_i \end{bmatrix} \]
$ P_i \in \mathbb{R}^{3n \times 12} $ 当点 \(n \ge 6\) 时,其满秩为12,其秩为11,则 null space 有唯一解。
然而解上面的 \(R_i, T_i\) 需要事先知道各点的景深 \(\alpha^1, \dots, \alpha^n\),对于 RGBD 相机和双目相机,这完全没有问题,可以直接获取。
但是对于普通单目相机,这个问题就是一个迭代的过程,在景深和位姿之间迭代。
\[ \alpha^j = - {\Sigma_{i=2}^m(\hat{\mathbf{x_i^j}} T_i)^T \hat{\mathbf{x_i^j}}R_i\mathbf{x_1^j} \over \Sigma_{i=2}^m\| \hat{\mathbf{x_i^j}} T_i \|^2}, \quad j = 1, \dots, n \]
8. 线的多视图重建
与点的方式类似,就不赘述了。
【多视图几何】TUM 课程 第6章 多视图重建的更多相关文章
- 【多视图几何】TUM 课程 第5章 双视图重建:线性方法
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第3章 透视投影
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第4章 同名点匹配
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第2章 刚体运动
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第1章 数学基础:线性代数
在 YouTube 上找到了慕尼黑工业大学(Technische Universitaet München)计算机视觉组 Daniel Cremers 教授的 Multiple View Geomet ...
- javascript进阶课程--第三章--匿名函数和闭包
javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...
- MariaDB第四章:视图,事务,索引,外键--小白博客
视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结 ...
- mariadb(第五章)视图、事物、索引、外键
视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结 ...
- 第五章 Flask视图高级
add_url_rule和app.route原理剖析 add_url_rule add_url_rule(rule,endpoint=None,view_func=None) 这个方法用来添加url与 ...
随机推荐
- Latex编译过程中遇到的奇奇怪怪的问题及解决方案
标签(空格分隔): 杂七杂八的问题 有必要写一个博文记录自己在Latex编译时遇到的各种问题,希望可以帮到遇到同样错误的亲故.讲真,一直没有系统的学习Latex,都是投哪个会直接拿那个会的模板来套,然 ...
- linux 批量更改文件名 rename 命令
rename 的典型应用: # rename $1 $2 $3# $1: 要被取代的關鍵字# $2: 新的關鍵字# $3: 檔名符合這個規則的才取代 # 把 IMG001.jpg, IMG002.jp ...
- oracle 恢复误删数据
快照 select * from sys_info as of timestamp to_Date('2014-04-08 15:28:00', 'yyyy-mm-dd hh24:mi:ss') ...
- BZOJ2436 [Noi2011]Noi嘉年华 【dp】
题目链接 BZOJ2436 题解 看这\(O(n^3)\)的数据范围,可以想到区间\(dp\) 发现同一个会场的活动可以重叠,所以暴力求出\(num[l][r]\)表示离散化后\([l,r]\)的完整 ...
- BZOJ3836 [Poi2014]Tourism 【树形dp +状压dp】
题目链接 BZOJ3836 题解 显然这是个\(NP\)完全问题,此题的解决全仗任意两点间不存在节点数超过10的简单路径的性质 这意味着什么呢? \(dfs\)树深度不超过\(10\) \(10\)很 ...
- 使用apt-mirror搭建debian本地仓库
apt-mirror能够将官方镜像下载到本地,并保证目录结构与其一致,但是不能对镜像仓库进行修改.如果想要修改镜像仓库,需要使用reprepro. 1.安装apt-mirror # aptitude ...
- Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较http://www.cnblogs.com/riskyer/p/3320357.html JAVA LIST 遍历http://blog.csdn.net/lo ...
- Linux系统时间函数
先来说说自己在做工程过程中的一些理解: 1, 输入time_t,输出tm格式的函数 loctaltime(time_t) / gmtime(time_t) 其中localtime会受时区和夏令时影响, ...
- hdu 3068
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 为什么只有一个元素的tuple要加逗号?
如果要定义一个空的tuple,可以写成(): >>> t = () >>> t () 但是,要定义一个只有1个元素的tuple,如果你这么定义: >>& ...