Skip to content

Latest commit

 

History

History
237 lines (160 loc) · 10.6 KB

chapter-11.md

File metadata and controls

237 lines (160 loc) · 10.6 KB

基本矩阵 $F$

本章讲述如何用数值方法在已知若干对应点的情况下求解基本矩阵 $F$

11.1 基本知识

基本矩阵定义如下 $$ x^{'T} F x = 0 $$

定义 $\bold{x} = (x,y,1)^{T}$,$\bold{x^{'}} = (x^{'},y^{'},1)^{T}$ 。带入基本矩阵的定义并整理可以得到一个方程组,记为$Af = 0$。具体形式参见书 279页

解析解:$A$的rank如果是8,那么直接求方程组的特解就可以。但是一般情况下有噪声,所以$A$的rank有可能是9,那么就用SDV分解。可以表达成$A=UDV^{T}$,那么$f$ 就是$V$的最后一列.

11.1.1 奇异性约束

$F$是一个奇异矩阵,rank为2. 利用这个性质,我们可以先用解析解求出一个$F$, 然后分解为$F=UDV^{T}$,进一步写成$F=Udiag(r,s,t)V^{T}$, 接着把$t$换成0就可以了。利用解析解求$F$的时候需要8组对应点,所以这个方法叫8点法

11.1.2 已知7个对应点怎么办

求解$Af=0$,然后选基础解系中的两个特解$f_1,f_2$ (书中叫零空间,null space),然后构造一个方程$\alpha f_1 + (1-\alpha )f_2$, 再利用$F$是奇异矩阵的性质,得到$det(\alpha f_1 + (1-\alpha )f_2) = 0$. 解这个方程就可以得到$\alpha$

11.2 正交化的8点法

把8个点的质心平移到原点,把点看成一个向量,然后把向量模长归一化.

11.3 数值最优化

优化目标: 找到一个$F$, 使得$||Af||$最小,且满足 $||f||=1$$det F=0$ 步骤如下:

  1. 通过8点法找初始值$F_0$, 然后找到$F_0$的零向量$e_0$
  2. 记$e_0 = e_i$, 通过 $e_i$ 构造 $E_i$ $$ E_0 = \left[ \begin{matrix} e_0 & 0 & 0 \ 0 & e_0 & 0 \ 0 & 0 & e_0 \ \end{matrix} \right] $$
  3. $f_i=E_i m_i$ 用 595 页的算法求解优化目标
  4. 计算误差 $\epsilon_i = A f_i$
  5. 利用600页Levenberg–Marquardt算法改变$e_i$
  6. 重复1到5步直到算法收敛

11.4 几何损失函数

本章主要介绍如何用几何损失函数来计算基本矩阵。

11.4.1 黄金法则 (Gold Standard method)

我们假设图像噪声服从高斯分布,那么我们优化下式: $$ \Sigma_i d(x_i,\hat{x})^2 + d(x_i^{'},\hat{x}^{'})^2 $$

$x_i \leftrightarrow x^{'}_i$是已知对应点。$\hat{x},\hat{x}^{'}$是没有噪声的点。

优化步骤如下:

  1. 根据含有噪声的点$x_i,x^{'}_i$估计出一个初始的$\hat{F}$
  2. 根据$\hat{F}$求出$e^{'}$ (回忆基本矩阵定义 $F=[e']{\times}P^{'}P^{+}$),然后构造 $P=[I|0],P^{'}=[[e']{\times}\hat{F}|e^{'}]$
  3. 根据$x_i \leftrightarrow x^{'}_i$ 还有$\hat{F}$,用三角化求出空间点$\hat{X}$
  4. 根据$\hat{X}$有以下两式成立 $\hat{x_i} = P\hat{X}, \hat{x_i}^{'} = P^{'}\hat{X}$
  5. 把上两式带入优化目标

11.4.2 参数化基本矩阵

非线性优化要求把$F$参数化,下面介绍几种方法。

  1. Over-parametrization. 把$F$写成$F=[t]_{\times}M$ M是任意的$3 \times 3$ 矩阵
  2. Epipolar parametrization. 把$F$ 第三列写成前两列的线性组合
  3. Both epipoles as parameters,参见书p286 11.8式

11.4.3 First-order geometric error (Sampson distance)

Sampson distance以 $x^{'} F x_{i}=0$为优化目标,将其写成: $$ \frac{(x^{'} F x_{i})^2}{(Fx_i)^2_1 + (Fx_i)^2_2 + (Fx^{'}_i)^2_1 + (Fx^{'}_i)^2_1} $$

$(Fx_i)^2_j$ 代表 $Fx_i$的第$j$个元素

Symmetric epipolar distance

$x^{'} F x_{i}=0$为优化目标,那么我们可以让$x^{'}$尽可能靠近 $F x_{i}$.所以就有以下损失函数 $$ \Sigma d(x^{'},Fx_i)^2 + d(x,Fx_i^{'})^2 $$

11.5 对各种损失函数的实验结果

本节选用3中不同的算法来进行对比:

  1. 正则化的8点法
  2. 最小化代数误差
  3. 最小化几何误差

我们直接上结论:

  1. 不要使用没有正则化的8点法,换句话说,用8点法必须要把点的坐标正则化
  2. 8点法式最快最方便的
  3. 如果追求准确,用最小化代数误差。
  4. 用Sampson distance也非常好。

11.6 使用RANSAC的算法

其步骤如下:

  1. 先找出每幅图像中的特征点(SIFT, FAST, ORB)

  2. 计算特征点之间的对应

  3. RANSAC采样:

    1. 任选7个点,用SVD解出一个$F$
    2. 用$F$和每一个点的坐标,计算一个距离$d_{\bot}$. $d_{\bot}$可以选择重投影误差,或者Sampson。(多说一句,重投影误差就是指两次投影之间的差别,由于是同一个三维点的两次投影,这两次投影在理论上应该是一样的,所以误差应该为0.)
    3. 找出满足$d_{\bot} < t$的点,其数量记为m,然后利用这些点重新计算$F$,重复第二步,直到m足够多。
  4. 利用m对点,再选一个损失函数(比如说重投影和sampson),用Levenberg–Marquardt algorithm来优化这个损失函数

11.7 一些特殊情况下$F$的计算

11.7.1 纯旋转

纯旋转情况下 $F = [e^{'}]_{\times}$ 这种情况下2对对应点就可以

11.7.2 Planar motion

Planar motion意思是一个刚体沿着与某平面平行的方向($l_{s}$)运动。在这种情况下 $F$满足$F=[e^{'}]{\times} [l{s}]{\times} [e]{\times}$

11.7.3 相机已经标定

如果相机已经标定了,那么我们可以在图像坐标系下计算本质矩阵$E$, 用$E$d代替$F$. 依旧是8点法。在E已知的情况下,把$E$分解成$UDV^T$, 其中$D = diag(a,b,c)$,然后把$D$换成$\hat{D} = diag((a+b)/2,(a+b/2),0)$, 于是答案就是$\hat{E} = U\hat{D}V$, 知道了$\hat{E}$和相机内参,就可以得出两个摄像机矩阵

11.8 其他的对应方式

上文讲述的是我们用点对应的方法求解$F$,本节我们介绍如何用其他对应方式来求解$F$.

线段对应。线段对应不会给基本矩阵$F$增加任何约束,因为线段重投影回去是平面,三维空间中平面一直会相交。

曲线对应。假设三维空间中有一条和极平面相切的曲线,该曲线投影在图像上的曲线一定和极线相切。这个性质就是一个约束:如果极线与图像中某曲线相切,则第二幅图像中对应的极线一定与某曲线相切。在这个结论里把曲线换成曲面也成立。

11.9 退化的情况

退化的情况是指若干对对应点无法唯一确定基本矩阵$F$. 其具体细节如下 定义 $N$$Af=0$$A$的零空间,也就是该方程的特解。

补充一点基础知识:零空间的维度就是自由度。比如说解方程组$Af=0$的时候,方程的解里有3个自由变量,那么零空间的维数就是3($f$本身是有9个变量)

  1. dim(N) = 1,这种情况是对应点$n>8$,基本矩阵有唯一解。
  2. dim(N) = 2,这种情况是对应点$n>7$,基本矩阵有1或3个解,主要会发生在对应点都落在某二次曲面上
  3. dim(N) = 3,这种情况是对应点$n>6$,基本矩阵有2个解系,主要会发生在两种情况:关于两个摄像机光心重合了,或者世界坐标中的点全部在一个平面上。

11.10 求解基本矩阵的几何解释

几何解释就是$x^{'}Fx = 0$定义了四维空间中关于点$(x,y,x^{'},y^{'})$的一个二次曲面

11.11 极线搜索

基本矩阵的一个重要作用就是已知第一幅图中的某一点$x$,找出第二幅图中该点对应的极线,那么第二幅途中$x$的对应点$x^{'}$肯定在极线上。如果我们考虑到噪声问题,那$x^{'}$应该落在极线的附近。所以本章讲述如何用基本矩阵的协方差矩阵来决定$x^{'}$的搜索区域.

我们直接上结论。$x$代表一个点,对于基本矩阵$F$, 记其协方差矩阵$\Sigma_F$, $x$对应的极线 $l=Fx$, $l$ 的均值 $m$ 记为 $\bar{l}$, 我们根据以上几项构建似然函数: $$ (l-m)^T \Sigma_{l} (l-m) = k^2 $$

$k$是某一个常数。同时我们用 $F_2(x)$代表 $\chi_2^2$ 分布。我们只需要把$k^2$带入$\chi_2^2$ 分布,就可以得到要搜索的点落在 C 代表的区域内的概率。C如下所示: $$ C=\bar{l} {\bar{l}}^T -k^2\Sigma_1 $$

11.11.1 实验验证

本节主要验证一下上一节介绍方法的有效性。先找出一些对应点,当成ground truth. 然后给每个点加上高斯噪声,然后再计算一个$F$,通过$F$求出极线,并且用上一节方法计算ground truth落在$c$中的概率。

11.12 图像校正

校正的意思是说把两个图像旋转到同一个平面,这样就是一对双目立体图像,可以做双目立体匹配。校正分为以下几个部分。

11.12.1 把极点映射到无穷远

如果两幅图的极点都映射到了无穷远,那么他们的极线就平行了。极点本来是 $(f,0,1)$,无穷远处的点是 $(f,0,1)$, 我们有以下矩阵可以做到这一点:

$$ G=\left[ \begin{matrix} 1 & 0 & 1\\ 0 & 1 & 0\\ -1/f & 0 & 1 \\ \end{matrix} \right] $$

如果考虑任意一点$x_0$,那么$G$应该变成$GRT$. $T$把$x_0$转换到原点,$R$把$e^{'}$旋转到$(f,0,1)$

11.12.2 匹配变换

在上一节我们把一个图像已经转选转了某一个角度 (矩阵$H$做了这个事),使其极线平行与立体匹配的基线,接下来我们需要把另外一个图像也转一下 (矩阵$H^{'}$做这事),使其极线也平行与基线。我们不是对第二幅图像重复上一节,而是寻找$H$和$H^{'}$的关系。该关系描述如下: 如果$l$he$l^{'}$是两幅图像中对应的极线,那么有下式成立:$H^{-T}l=H'^{-T}l'$ ($H$如果是点变换$H^{-T}$就是线变换。) 根据该式我们有以下优化函数: $$ \Sigma_{i} d(Hx_i,H'x'_{i})^2 $$

同时,$H$和$H^{'}$应当满足如下关系: $$ H=(I+H^{'}E^{'}a^{T})H^{'}M $$

其证明参见p306

如果我们考虑一个特殊的$H^{'}$,它可以把$e^{'}$变换到无穷远点$(1,0,0)^T$,(上文提到的$H^{'}$没有这个性质),那么$H$和$H^{'}$ 应该有如下性质:在已知$F=[e^{'}]_{\times}M$的条件下, $H=H_A H_0$, $H_0=H^{'}M$, $H_A$是一个仿射变换。 利用这个性质,我们做一点改写:$\hat{X}^{'} = H^{'}X_i^{'}$, $\hat{X_i} = H_0X_i$, 则优化目标可以变成 $$ \Sigma_i d(H_A\hat{X_i},\hat{X^{'}_i})^2 $$

接下来我们参数化,令 $\hat{X_i}=(\hat{x_i},\hat{y_i},1)$,$\hat{X^{'}_i}=(\hat{x^{'}_i},\hat{y^{'}_i},1)$, 以上优化目标就变成了

$$ \Sigma_i (a\hat{x_i}+b\hat{y_i}+c-\hat{x^{'}_i})^{2} + (\hat{y_i}-\hat{y^{'}}) $$

11.12.3 总结

本节对算法本身做一个总体的描述:

  1. 找出至少7对对应点。
  2. 计算基本矩阵$F$和两个极点$e,e^{'}$
  3. 找出$H^{'}$,该矩阵把$e^{'}$映射到$(1,0,0)^T$
  4. 优化目标函数$\Sigma d(Hx_i,H^{'}x^{'})$
  5. 利用$H$和$H^{'}$分别将两幅图像转换

11.12.5 仿射校正

如果摄像机本身可以本仿射摄像机近似,那么就直接用仿射变换来校正,把上文的基本矩阵换成仿射相机的基本矩阵就可以。