课程的 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. 初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序

    初入码田--ASP.NET MVC4 Web应用开发之一  实现简单的登录 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查 2016-07-29 在此之前,需要一台电脑( ...

  2. RHEL/Centos下Sendmail服务器搭建

    目的 Linux下配置Sendmail服务器,并通过客户端验证. 环境 Cento6 局域网(可访问互联网) 内容 配置Sendmail服务器,使得客户端能够通过foxmail或者outlook ex ...

  3. sqlserver查询数据库中包含某个字段的所有表和所有存储过程

    1.查询包含某字段的所有表 select object_name(id) objName,Name as colName from syscolumns where (name like'%你要查询的 ...

  4. QPainter 基础绘图

    调用QPainter的接口来绘制一些基本的图形 头文件: #include <QMainWindow> #include <QPainter> namespace Ui { c ...

  5. Stone Game, Why are you always there? HDU - 2999(sg定理)

    题意:给你n个数的集合,表示你每次取石子只能为集合里的数,然后给你一排石子,编号为1~n,每次你可以取相邻位置的连续石子(数量只能为集合里的数),注意石子的位置时不变的,比如把2拿走了,1和3还是不相 ...

  6. 何登成大神对Innodb加锁的分析

    背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备 ...

  7. Nginx 线上配置实例

    1 /etc/nginx/nginx.conf,在主配置下设置 /etc/nginx/conf.d/*.conf user nginx;worker_processes 1; error_log /v ...

  8. 【CF472G】Design Tutorial: Increase the Constraints

    Description 给出两个01序列\(A\)和\(B\) 要求回答\(q\)个询问每次询问\(A\)和\(B\)中两个长度为\(len\)的子串的哈明距离 ​ 哈明距离的值即有多少个位置不相等 ...

  9. 【bzoj3930】 CQOI2015—选数

    http://www.lydsy.com/JudgeOnline/problem.php?id=3930 (题目链接) 题意 求在${[L,R]}$中选出${n}$个数,可以相同,使得它们的${gcd ...

  10. linux内核分析 第六周 分析Linux内核创建一个新进程的过程

    进程的描述 操作系统的三大管理功能:进程管理.内存管理.文件系统 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 进程控制块PCB task_struct:进 ...