(三)对极几何

对极约束理解:
 
1. 对于有重叠纹理的两帧图像,通过特征点匹配可以找到一些匹配对,这是对极几何约束的基础;
 
2. 匹配对是由同一空间点在不同像素平面投影得到的不同像素坐标,以参考帧为基础,假设空间点为 $P_{w}$,参考帧投影像素为 $p_{r}$, 当前帧投影像素为 $p_{c}$。由于空间点 $P_{w}$ 深度值不确定,因此其可能在参考帧光心 $O_{r}$ 和投影像素 $p_{r}$ 射线上的任意一个位置。而射线上的 $P_{w}$ 与当前帧的光心 $O_{c}$ 的连线在当前帧像素平面的交点即为投影像素 $p_{r}$,因此很显然,$P_{w}, O_{r}, O_{c}, p_{r}, p_{c}$ 五点共面。具体可以参考对极几何、对极约束、单应性变换这篇文章。
 
3. 对极约束的本质是投影像素点归一化平面上的点 $p_{c}^{n}$ 在空间点 $P_{w}$ 在参考帧图像中投影的极线上,而该极线可以通过本质矩阵和参考帧像素归一化平面上的点 $p_{r}^{n} $的乘积来计算:$l = E * p_{r}^{n}$。而点 $p_{c}^{n}$ 在该极线上意味着 $(p_{c}^{n})^T * l = 0$。
 
4. 为什么要用归一化平面上的点?主要是要利用位姿变换将两个匹配像素关联起来,并且去除相机内参的依赖,否则我们就需要求解基本矩阵,而不是本质矩阵了。又由于不知空间点的深度值,因为只能采用归一化平面(实际上用哪个平面都不影响,因为深度值未知,任意取,最后再除掉深度即可。不过为了简单点,一般都采用归一化平面)。得到归一化平面上的点,实际上可以说我们已经知道匹配点在各自相机坐标系下对应的空间点,尽管深度信息不够准确,但是已经可以使用位姿变换来描述二者之间的关系了。假设参考帧和当前帧匹配点对应的深度值为 $d_{r}, d_{c}$,则相对变换可以描述为:
$$d_{c} * p_{c}^{n} = d_{c} * R * p_{r}^{n} + t$$

5. 如何求解上述问题呢?我们利用叉乘的性质,假设有三个点 $a, b$,令 $c = a \times b$,则有 $a^{T} * c = 0$ 和 $b^{T} * c = 0$。此外,还有 $c \times c = 0$。回到上面的问题,对于公式:
$$d_{c} * p_{c}^{n} = d_{c} * R * p_{r}^{n} + t$$

先同时叉乘位移 $t$,得到:
$$d_{c} * t \times p_{c}^{n} = d_{c} * t \times R * p_{r}^{n} + 0$$

再同时乘上 $(p_{c}^{n})$,得到:
$$0 = d_{c} * (p_{c}^{n})^{T} * t \times R * p_{r}^{n}$$

令 $E = t \times R$,则上式可以简化成:
$$d_{c} * (p_{c}^{n})^{T} * E * p_{r}^{n} = 0$$

由于上式是一个齐次方程,尺度对其影响不大,不论左右两边乘上任何常数值,结果都没有变化,因此我们可以进一步简化成:
$$(p_{c}^{n})^{T} * E * p_{r}^{n} = 0$$

OK,到这里,我们已经完全把对极几何约束描述完成了。接下来就是解方程的问题了。我们说到,尺度因子对上述齐次方程影响不大,那么对应的 $E$ 矩阵也可以简化一个自由度,即所有参数同时除掉最后一维,使得最后一维变成 $1$。通过将上述约束关系展开,可以得到一个八元一次方程,为了求解这八个参数,我们需要有8个方程,因此需要有8组匹配点,所以这也是该方法叫八点法的原因。

6. 利用八点法求解,我们构建了一个方程:
$$H*E = 0$$

其中,$E$ 为一个9维的向量,$H$ 是一个$8\times 9$ 的矩阵。利用SVD对矩阵 $H$ 进行分解,得到 $V$ 矩阵中最后一列的向量(对应奇异值最小的向量),即为上述方程的最优解。

7. 之后继续对本质矩阵 $E$ 进行SVD分解(注意,我们需要对其进行reshape为 $3\times 3$ 的矩阵),计算出旋转矩阵和位移向量组成的四组解。再三角化所有匹配对进行选择最优模型。
有关对极约束相关的代码,笔者已经上传到github上,有需要的欢迎自行下载和修改。可以的话,麻烦给我github点个star,谢谢
posted @ 2020-03-31 13:48  小C酱油兵  阅读(933)  评论(0编辑  收藏  举报