我们在[1]中曾经谈到了如何在对极线上去寻找对应点,这样会使得算法更鲁棒,而且速度更快。在本文中,我们将会继续介绍一种称之为图像矫正的方法,通过这种方法,我们可以在对极线的基础上,使得寻找对应点变得更为容易。
前言
我们在[1]中曾经谈到了如何在对极线上去寻找对应点,这样会使得算法更鲁棒,而且速度更快。在本文中,我们将会继续介绍一种称之为图像矫正的方法,通过这种方法,我们可以在对极线的基础上,使得寻找对应点变得更为容易。
如有谬误,请联系指正。转载请注明出处。
e-mail: FesianXu@gmail.com
github: https://github.com/FesianXu
知乎专栏: 计算机视觉/计算机图形理论与应用
微信公众号:机器学习杂货铺3号店
为什么我们需要图像矫正
我们在[1]曾经聊到了在对极线上寻找对应点的方法,如Fig 1.1所示。这种方法将对应点可能的范围约束到了一条直线上,而不是一个二维平面,这样大大减小了搜索空间。同时,我们也在[1]中聊过,每个对极面都是会经过基线的,每个对极线也是会经过对应的对极点的,正是因为如此,其实对于单张图的对极线组来说,如果延伸每条对极线,我们会发现每条对极线都会汇聚于对极点上,如Fig 1.2所示。也正是因为如此,我们得到的对极线们都不是平行的,如Fig 1.3所示。
我们在后续的处理中,将会发现不平行的对极线会使得寻找对极点的运算变得复杂,我们期望的是, 如果每对对极线都是平行的,那将会大大减少后续算法的复杂度,特别是在求视差时,平行的对极线将会提供极大的便利。 理想的对极线对的效果如Fig 1.4所示。我们后续就讨论如何才能从不平行的对极线转换成平行的,也就是 图像矫正(image rectification) 的具体操作。
图像矫正
需要明确的是,进行图像矫正之前需要知道相机的内参数和外参数[4]。
我们首先要知道,为什么我们的对极线对会不平行呢?如图Fig 2.1所示,其不平行的原因是因为我们的成像平面没有共面(coplanar),那么自然地,我们的直接做法就是矫正我们的成像平面,使得其共面,效果如图Fig 2.2的黄色面所示。其总体效果,如Fig 2.3所示,我们可以发现,通过这种手段,我们的对应点的搜索空间进一步缩小到了水平线上,只用一个水平线上的参数
我们后续具体分析这个矫正过程,我们要想怎么样才能将成像平面矫正到共面呢?我们观察图Fig 2.4,我们延伸射线
我们为什么要加上这个焦点到两个矫正后的成像平面的距离相同这个约束呢?让我们看一个例子。
在如图Fig 2.5的系统中,我们假设两个成像平面是共面的,其焦点之间的距离
从[1]中提到的对极约束的代数表达形式,我们有:
我们知道极点
于是,其实矫正成像平面的后果就是,我们的极点被挪到了无限远处,这个和我们图Fig 1.2的推论相同。
我们到现在算是对图像矫正有了直观上的印象,接下来我们尝试用算法去描述这个过程。图像矫正算法主要分四步。
用旋转矩阵
旋转左相机,使得左成像平面的极点到无限远处。用和第一步相同的旋转矩阵旋转右相机。
用外参数中的
旋转继续旋转右相机。对坐标系调整尺度。
我们首先需要确定旋转矩阵
因此旋转矩阵为:
随后进行旋转和调整坐标系尺度,如:对于左相机的点
最后的矫正结果展示如:
Reference
[1]. https://blog.csdn.net/LoseInVain/article/details/102665911
[2]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.
[3]. https://blog.csdn.net/LoseInVain/article/details/102756630
[4]. https://blog.csdn.net/LoseInVain/article/details/102632940