引言
前文已经介绍了极线约束以及校正极线的重要性,这里主要对常见的极线校正算法做推导。本文主要参考【立体视觉(四)】之极线校正与双目视觉-CSDN博客
正文
Fusiello校正法
Fusiello校正法分为非定标校正和定标校正,非定标不需要相机标定,定标需要但精度更高,这里给出定标的推导过程。
极线校正的本质,是通过几何变换使得两个摄像头(或两幅图像)之间的几何关系变得简单,从而简化立体匹配任务。通常的做法是将其校正为平视双目标准几何结构。一般的做法是重新定义投影矩阵完成对几何关系校正。
其中矩阵 K 、R 、O 分别表示相机的内参矩阵、旋转矩阵和世界坐标系下的相机光心坐标。
如上图所示,图像坐标系u轴与基线平行,左右影像对应的焦距f和主点坐标相同。
首先计算旋转矩阵
旋转相机使左右像平面互相平行且均平行于相机基线,其本质在于通过改变外参重新定义相机坐标系,Fusiello 方法所定义的新坐标系如下:
(1)为了保证像平面与相机基线平行,新相机坐标系的X 轴需与基线平行,主要通过改变X轴的基向量,使其由指向
实现,如下式所示:
(2)为了使纠正后的影像范围与原影像范围尽可能保持一致,新相机坐标系的Y轴采用与原相机坐标系的Y轴相近的方向,主要通过基于原始的Z轴与新的X轴进行叉乘计算获取:
(3)新相机坐标系的Z 轴分别与X轴、Y轴正交,即Z轴的基向量如下式所示:
由于旋转后的像平面互相平行且均平行于基线,但是相机焦距的不同会导致两平面不共面,因此需要统一相机参数,即计算统一的新内参矩阵,为了尽可能保证新内参矩阵与原内参矩阵保持一致,新内参矩阵使用左右影像原内参矩阵的平均数,同时为了简化求解过程,构建统一的内参矩阵,因此将其中的倾斜因子设定为0,即把
中的s设置为0(倾斜因子是相机内参矩阵 K中的一个参数,用于表示图像中两个坐标轴之间的非正交性)。
计算内参矩阵:
将计算得到的旋转矩阵和内参矩阵代入可能新的投影矩阵模型:
有了新的投影矩阵,我们就可以计算转换矩阵,将原始像素校正。
计算转换矩阵:
令:,
则:
其中P和p都是齐次坐标形式。因此设置,由于P是齐次的,我们令
易知:
其中,
,
,因此我们可以整理方程:
,
我们需求得,由上式可得
,因此:
,
由此我们可得两相机的转换矩阵,
。
生成核线影像:
代入转换方程建立新旧像素坐标的关系:
具体而言,首先建立一个新的图像尺寸与原图像一致,通过上式遍历新图中的每一个坐标对应的原图像坐标,将其坐标的像素值赋给新图像。注意由于转换后的数值不一定为整数,需要进行插值计算坐标(常用双线性插值)。
Bouguet法校正
我们令为世界坐标系下某一点。R,t为右相机到左相机的旋转,位移矩阵。
,
为左右相机在世界坐标系下的某一匹配点。
,
为世界坐标系到左相机坐标系的变换矩阵,
,
为世界坐标系到右相机坐标系的变换矩阵。对于左右相机有刚体变换公式:
那么由于是刚体变换过程,因此可以表示为:
两式相减可得:
同时左乘可得:
整理得:
因此:
由右相机到左相机得刚体变换可表示为:
由于旋转矩阵是正交矩阵,因此,则:
通过对Fusiello校正法我们知道,只是将右相机旋转到左相机会有较大相机畸变,同时也会减少公共面积,因此Bouguet法证明将左右相机各旋转一半可以使图像畸变最小,公共面积最大。因此我们先将其各旋转一半使其共面,再构建公共旋转矩阵使其行对准。
共面:将右相机相对左相机得旋转拆分为左右相机的合成矩阵,即:
行对准:建立行对准矩阵,使其xyz轴相对应,极点在无穷远处。具体过程与Fusiello过程一致不再赘述,构建方程形式为:
,联立上述变换矩阵,可得左右旋转矩阵:
类似的,可以获得最后的转换矩阵