(三)对极几何

对极约束理解:

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,谢谢

参考文献

1. 使用cv::findFundamentalMat要注意的几点

2. 对极几何、对极约束、单应性变换

3. OpenCV中cv::recoverPose()函数详细介绍和用法,以及求解出的R,t的坐标相对关系

4. 相机位姿求解问题?

5. SLAM之特征匹配(一)————RANSAC-------OpenCV中findFundamentalMat函数使用的模型

原文地址:https://www.cnblogs.com/yepeichu/p/12604678.html

时间: 2024-11-26 11:40:11

(三)对极几何的相关文章

对极几何

对极几何是研究两幅图像之间存在的几何.它和场景结构无关,只依赖于摄像机的内外参数.研究这种几何可以用在图像匹配.三维重建方面.(因为参考多处来源,本文各个章节之间没有统一约定符号) 基线:连接两个摄像机光心$O(O^{'})$的直线 对极点:基线与像平面的交点 对极平面:过基线的平面 对极线:对极平面与图像平面的交线 基本矩阵F:对应点对之间的约束$m^{'T}Fm=0$ 极线约束 对于一个单一的摄像机观测3D点$w$的情况.$w$必定位于一条穿过光心和摄像机平面中$x_{1}$的光线上.然而,

2D-2D:对极几何

对极约束 \[ \boldsymbol{x}_{2}^{T} \boldsymbol{F} \boldsymbol{x}_{1}=\boldsymbol{0} \quad \hat{\boldsymbol{x}}_{2}^{T} \boldsymbol{E} \hat{\boldsymbol{x}}_{1}=\mathbf{0} \] 其中 \[ \boldsymbol{E}=\boldsymbol{K}_{2}^{-T} \boldsymbol{F K}_{1} \quad \hat{\bol

Javascript定义类(class)的三种方法

注:本文转自阮一峰,觉得此篇文章对我对大家有帮助,因此转过来. 将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越庞大的项目.Javascript代码的复杂度也直线上升.单个网页包含10000行Javascript代码,早就司空见惯.2010年,一个工程师透露,Gmail的代码长度是443000行! 编写和维护如此复杂的代码,必须使用模块化策略.目

几何画板中该如何插入公式

在使用几何画板制作课件的过程中,可能会经常使用到某些数学公式或符号,那么该如何将数学公式插入到几何画板呢?下面给大家介绍两种方法,都是非常实用的,希望对大家学习几何画板有帮助. 方法一 导入法 像导入外部图片一样,将Word或WPS中的数学公式或符号,导入到几何画板的课件中.  可以先在Word或WPS中将数学公式编辑好,然后执行复制命令,在几何画板中粘贴即可将公式作为图片导入.  从Word中导入公式示例 方法二 “编辑数学格式文本”法 其实几何画板中提供了输入常用数学公式或符号命令,只是初学

几何画板在教学中的作用

几何画板的操作步骤极其简单,不需要编程,简单操作,老师就可以画出各种各样的图形,还可以及时地按照教学的要求,更改图形的尺寸大小,或者是画出新的图形来.每一个老师都可以通过几何画板教程很快地掌握几何画板的基本使用方法,无须耗费太多的时间和精力,从而减少老师的备课量. 一.几何画板在代数教学中的应用 在进行高一函数教学时,函数的两种表达方式--解析式和图像,两者之间常常需要对照而加以比较.在研究指数函数.对数函数.幂函数等基本初等函数的图像和性质的时候,通过对几何画板的使用,可以将各种具体的解析式的

几何画板给word绘制图形的方法

几何画板是一款专门用来绘图的工具,它里面有很多的绘图工具和功能菜单,都是专门为画图而设计的,比如一些理科的期刊杂志论文出版的时候,里面所涉及到的图形很多都是用几何画板画出来的.下面就根据几何画板教程来一起来学习几何画板的绘图技巧. 一.用几何画板画凸透镜 在理科论文中,如果要论证凸透镜成像规律,可以借助几何画板来画图,具体步骤如下: 1.构造线段.选择“线段工具”绘制线段AB.选择“点工具”画出点C.点D,并构造出线段CD. 2.构造圆.选中线段AB和点C,选择“构造”-“以圆心和半径绘圆”命令

Javascript定义类的三种方法分析

一.构造函数法 function User() { this.name = "张三"; } 生成实例的时候,使用new关键字. var user1 = new User(); alert(user1.name); // 张三 类的属性和方法,还可以定义在构造函数的prototype对象之上. User.prototype.sing = function(){ alert("only you!"); } 缺点:比较复杂,用到了this和prototype,不易编写和阅

让优秀的文章脱颖而出---极客头条使用体验

(本文参加"极客头条使用体验征文"活动(http://blog.csdn.net/blogdevteam/article/details/47026325),谢谢.) 最近,CSDN在推广"极客头条".作为CSDN的一位老用户,我也想表达一下自己对于"极客头条"的看法.文章中的所有观点不一定都对,大家可以参考. 一.个人对极客头条的认识 要弄懂"极客头条",我们可以先来看看"极客"和"头条&quo

SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵

在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过"小孔"映射到二维的图像平面,可以使用下面公式描述: \[ x = MX \]其中,\(c\)是图像中的像点,\(M\)是一个\(3\times4\)的相机矩阵,\(X\)是场景中的三维点. 通过小孔相机模型,可知假如从像点\(x\)向相机的中心\(C\)反投影一条射线\(\overrightarrow{xC}\),则该射线必定经过对应像点的三维空间点\(X\),但显然仅仅通过一个像点无法确定\(X\)的具体位置,因为在射线\(\