课程的 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章 多视图重建的更多相关文章

  1. 【多视图几何】TUM 课程 第5章 双视图重建:线性方法

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

  2. 【多视图几何】TUM 课程 第3章 透视投影

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

  3. 【多视图几何】TUM 课程 第4章 同名点匹配

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

  4. 【多视图几何】TUM 课程 第2章 刚体运动

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

  5. 【多视图几何】TUM 课程 第1章 数学基础:线性代数

    在 YouTube 上找到了慕尼黑工业大学(Technische Universitaet München)计算机视觉组 Daniel Cremers 教授的 Multiple View Geomet ...

  6. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

  7. MariaDB第四章:视图,事务,索引,外键--小白博客

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结 ...

  8. mariadb(第五章)视图、事物、索引、外键

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结 ...

  9. 第五章 Flask视图高级

    add_url_rule和app.route原理剖析 add_url_rule add_url_rule(rule,endpoint=None,view_func=None) 这个方法用来添加url与 ...

随机推荐

  1. 【CSS】规范大纲

    文件规范: 文件分类 : 通用类 :业务类. 文件引入:行内样式(不推荐):外联引入:内联引入.(避免使用Import引入) 文件本身:文件名. 编码:UTF-8. 注释规范: 块状注释:统一缩进,在 ...

  2. module.exports 、 exports 和 export 、 export default 、 import

    1:commonjs规范 module.exports={a:10,b:20} var test=require('lib/test') console.log(test.a);console.log ...

  3. 【ActiveMQ】- 发布/订阅模式

    publish/subscribe 特点:A发送的消息可以被所有监听A的对象的接收,就好比学校的广播,所有的学生都可以收听校园广播信息. 消息生产者: package com.zhiwei.advan ...

  4. USACO Section 1.5 Superprime Rib 解题报告

    题目 题目描述 超级素数的定义如下:如果有个素数我们从右往左依次去掉一位数,每次去掉一位数剩下的数仍然是素数,那么我们称这个数是超级素数.例如7331,这是一个素数,从右往左依次去掉一位数733, 7 ...

  5. 洛谷 P4009 汽车加油行驶问题 解题报告

    P4009 汽车加油行驶问题 题目描述 给定一个\(N×N\)的方形网格,设其左上角为起点◎,坐标(1,1) ,\(X\)轴向右为正,\(Y\)轴向下为正,每个方格边长为1 ,如图所示. 一辆汽车从起 ...

  6. Android Studio aidl文件路径自定义问题

    1.aidl旧文件夹中添加的内容无法编译 sourceSets中主要是把把src/main/aidl文件也作为java.srcDirs, resources.srcDirs,这样当编译程序时,AIDL ...

  7. Java-异常机制详解以及开发时异常设计的原则要求

    Java-异常机制详解以及开发时异常设计的原则要求 http://blog.csdn.net/Jack__Frost/article/details/52760930?locationNum=6

  8. C#线程篇---Windows调度线程准则(3)

    Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题. 我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法 ...

  9. CDOJ--1141

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1141 分析:运用欧拉函数可解此题. #include <iostream> #include ...

  10. php 中的错误处理机制

    php 里有一套错误处理机制,可以使用 set_error_handler 接管 php 错误处理,也可以使用 trigger_error 函数主动抛出一个错误. set_error_handler( ...