在立体视觉中,我们通过多个摄像机的相互配合,可以获得关于现实生活中物体的一些3D信息,通过这些信息,我们可以对这个物体进行重建,建模等等。而在立体视觉中,对极几何有着非常重要的作用,在本文中,笔者将讨论下立体视觉中的对极几何,如何用对极几何去进行更好更快地寻找不同视图中的对应点。
前言
在立体视觉中,我们通过多个摄像机的相互配合,可以获得关于现实生活中物体的一些3D信息,通过这些信息,我们可以对这个物体进行重建,建模等等。而在立体视觉中,对极几何有着非常重要的作用,在本文中,笔者将讨论下立体视觉中的对极几何,如何用对极几何去进行更好更快地寻找不同视图中的对应点。如有谬误,请联系指正。转载请注明出处。
e-mail: FesianXu@gmail.com
github: https://github.com/FesianXu
知乎专栏: 计算机视觉/计算机图形理论与应用
微信公众号:机器学习杂货铺3号店
什么是立体视觉
立体视觉(Stereo Vision)是什么呢?我们可以这样理解:
- Correspondences: 给定一张图片中的像素
点,寻找其在另一张图片中的对应点 。 - Reconstruction: 给定一组对应点对
,计算其在空间中对应点 的3D坐标。
那么,在本文中,其实我们要讨论的内容就属于如何去更好更快地寻找对应点。抱着这个问题,我们正式地开始讨论对极几何吧。
对极几何
假设我们现在有两张从不同视角拍摄的,关于同一个物体的图片,如Fig 2.1所示,最为朴素的想法就是从一个2D区域中去寻找对应点,这样显然我们的计算复杂度很高,而且还不一定精准,那么我们有没有能够改善这个算法的方案呢?我们能不能对对应点的可能搜索范围进一步缩小呢?答案是可以的。
通过对极几何的约束,我们可以把搜索空间限制在一个直线上,我们将这个直线称之为对极线,显然,这样不仅提供了搜索的效率,还提高了搜索的精确度。如Fig 2.2所示。
这个对极几何那么神奇,那到底是什么原理呢?且听笔者慢慢道来。
对极约束
为了简单分析考虑,我们现在只是假设两台摄像机的情况,假设我们已经对摄像机进行了内外参数的标定[2],也就是说,我们已经知道了摄像机的朝向以及彼此之间的距离,相对位置关系等,同时也知道了内参数,也就是焦距等等。那么我们假设现在这两台摄像机同时对某个现实物体点
在Fig 2.3中,其中的
对于这两个不同的相机坐标系,我们对于这两个成像点有着不同的坐标系表达,让我们分别以各自的焦点为原点,表达这两个点,有:
- 点
和点 称之为极点(epipole) - 线
和 称之为对极线(epipolar line),其中 是点 的对极线, 是点 的对极线。 - 焦点之间的连线
称之为基线(Baseline) - 平面
称之为对极面(epipolar plane)。
具体的元素位置,我们还能参考图Fig 2.4中的英语标注。
那么由图Fig 2.3我们其实很容易发现,所谓的对极约束,指的就是,成像平面
再如图Fig 2.6所示,这是个实际图像的例子,我们发现我们刚才在几何上的结论在实际中是成立的。
同时,我们要注意到,我们的基线和成像平面的位置是不会改变的(假设不改变摄像机的相对位置的话),那么显然,不管实体点
好的,那么我们以上就直觉上讨论了对极约束,那么我们应该怎么用代数的方式去描述这个约束呢?毕竟只有用代数的方式表达,才能进行计算机的编程和实现。为了实现代数化,我们要引入所谓的本征矩阵。我们接下来讨论这个。
本征矩阵
还记得公式(2.1)中,我们曾经对两个对应点
OK, 不管怎么样,我们继续我们的讨论。我们发现在Fig 2.3中,
而式子中的点积为0表示了垂直关系,因此式子(2.2)正确表达了我们的对极约束,我们接下来代入坐标。
考虑在
我们发现,这里的旋转矩阵
去掉归一化坐标系的限制,引入基础矩阵
我们在本征矩阵那一节考虑的是归一化的坐标系,那么如果在原始的图像坐标系中,我们需要改写成:
通常来说,无论是基础矩阵还是本征矩阵都可以通过内外参数的标定来求得,特别地,通过足够多的的图像匹配计算,我们同样可以无须采用标定图像,也可以得到这两个矩阵。
Reference
[1]. 电子科技大学自动化学院 杨路 老师 计算机视觉课程课件。
[2]. https://blog.csdn.net/LoseInVain/article/details/102632940
[3]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.
[4]. http://answers.opencv.org/question/83807/normalized-camera-image-coordinates/
[5]. http://answers.opencv.org/question/83807/normalized-camera-image-coordinates/
[6]. https://en.wikipedia.org/wiki/Cross_product