三维重建入门(三):极线校正算法推导

引言

        前文已经介绍了极线约束以及校正极线的重要性,这里主要对常见的极线校正算法做推导。本文主要参考【立体视觉(四)】之极线校正与双目视觉-CSDN博客

正文

Fusiello校正法

        Fusiello校正法分为非定标校正和定标校正,非定标不需要相机标定,定标需要但精度更高,这里给出定标的推导过程。

        极线校正的本质,是通过几何变换使得两个摄像头(或两幅图像)之间的几何关系变得简单,从而简化立体匹配任务。通常的做法是将其校正为平视双目标准几何结构。一般的做法是重新定义投影矩阵M=K[R \mid t]=K[R \mid-R O]完成对几何关系校正。

其中矩阵 K 、R 、O 分别表示相机的内参矩阵、旋转矩阵和世界坐标系下的相机光心坐标。

如上图所示,图像坐标系u轴与基线O_{1} O_{2}平行,左右影像对应的焦距f和主点坐标相同。 

首先计算旋转矩阵R_{n}=\left[\begin{array}{l} r_{x}^{T} \\ r_{y}^{T} \\ r_{z}^{T} \end{array}\right]

旋转相机使左右像平面互相平行且均平行于相机基线,其本质在于通过改变外参重新定义相机坐标系,Fusiello 方法所定义的新坐标系如下:

(1)为了保证像平面与相机基线平行,新相机坐标系的X 轴需与基线平行,主要通过改变X轴的基向量,使其由O_{1}指向O_{2}实现,如下式所示:

r_{x}=\left(O_{1}-O_{2}\right) /\left\|O_{1}-O_{2}\right\| 

(2)为了使纠正后的影像范围与原影像范围尽可能保持一致,新相机坐标系的Y轴采用与原相机坐标系的Y轴相近的方向,主要通过基于原始的Z轴与新的X轴进行叉乘计算获取:

r_{y}=R_{Z} \times r_{x}

(3)新相机坐标系的Z 轴分别与X轴、Y轴正交,即Z轴的基向量如下式所示:

 r_{z}=r_{x} \times r_{y}

由于旋转后的像平面互相平行且均平行于基线,但是相机焦距的不同会导致两平面不共面,因此需要统一相机参数,即计算统一的新内参矩阵K_{n},为了尽可能保证新内参矩阵与原内参矩阵保持一致,新内参矩阵使用左右影像原内参矩阵的平均数,同时为了简化求解过程,构建统一的内参矩阵,因此将其中的倾斜因子设定为0,即把K=\left[\begin{array}{ccc} f_{x} & s & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right]中的s设置为0(倾斜因子是相机内参矩阵 K中的一个参数,用于表示图像中两个坐标轴之间的非正交性)。

 计算内参矩阵K_{n}

K_{n}=\left(K_{l}+K_{r}\right) / 2

将计算得到的旋转矩阵和内参矩阵代入可能新的投影矩阵模型:

M_{n}=K_{n}\left[R_{n} \mid-R_{n} O\right] 

有了新的投影矩阵,我们就可以计算转换矩阵,将原始像素校正。

计算转换矩阵T_{n}

令:Q=K RQ_{n}=K_{n} R_{n}

则:

\lambda p=M P=[K R \mid-K R O] P=[Q \mid-Q O] P

\lambda_{n} p_{n}=M_{n} P=\left[Q_{n} \mid-Q_{n} O\right] P

其中P和p都是齐次坐标形式。因此设置\lambda=\lambda_{n}=1,由于P是齐次的,我们令\mathbf{P}_{x y z}=(X, Y, Z)^{T} \in \mathbb{R}^{3}

易知:[R \mid-R O] P=R \mathbf{P}_{x y z}-R O=R\left(\mathbf{P}_{x y z}-O\right)

其中O \in \mathbb{R}^{3}R \in \mathbb{R}^{3 \times 3}-R O \in \mathbb{R}^{3 \times 1},因此我们可以整理方程:

\left\{\begin{array}{l} p=Q(P-O) \\ p_{n}=Q_{n}(P-O) \end{array}\right.Q \in \mathbb{R}^{3 \times 3}

我们需求得p_{n}=T p,由上式可得Q_{n}(P-O)=T Q(P-O),因此:

T=Q_{n} Q^{-1}T \in \mathbb{R}^{3 \times 3}

由此我们可得两相机的转换矩阵T_{1},T_{2} 。

生成核线影像:

代入转换方程建立新旧像素坐标的关系:

\lambda p=\lambda\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=T^{-1}\left[\begin{array}{c} x_{n} \\ y_{n} \\ 1 \end{array}\right]=T^{-1} p_{n}

具体而言,首先建立一个新的图像尺寸与原图像一致,通过上式遍历新图中的每一个坐标对应的原图像坐标,将其坐标的像素值赋给新图像。注意由于转换后的数值不一定为整数,需要进行插值计算坐标(常用双线性插值)。

Bouguet法校正 

        我们令P_{w}为世界坐标系下某一点。R,t为右相机到左相机的旋转,位移矩阵。P_{l}P_{r}为左右相机在世界坐标系下的某一匹配点。R_{l}t_{l}为世界坐标系到左相机坐标系的变换矩阵,R_{r}t_{r}为世界坐标系到右相机坐标系的变换矩阵。对于左右相机有刚体变换公式:

\left\{\begin{array}{l} P_{l}=R_{l} P_{w}+t_{l} \\ P_{r}=R_{r} P_{w}+t_{r} \end{array}\right.

那么由于是刚体变换过程,因此P_{w}可以表示为:

\left\{\begin{array}{l} P_{w}=\left(R_{f}\right)^{-1}\left(P_{l}-t_{l}\right) \\ P_{w}=\left(R_{r}\right)^{-1}\left(P_{r}-t_{r}\right) \end{array}\right.

两式相减可得:
\left(R_{l}\right)^{-1}\left(P_{l}-t_{l}\right)-\left(R_{r}\right)^{-1}\left(P_{r}-t_{r}\right)=0

同时左乘可得R_{r}
R_{r}\left(R_{l}\right)^{-1}\left(P_{l}-t_{l}\right)-\left(P_{r}-t_{r}\right)=0

整理得:

P_{r}=R_{r}\left(R_{l}\right)^{-1}\left(P_{l}-t_{l}\right)+t_{r}

因此:

P_{r}=\left[R_{r}\left(R_{l}\right)^{-1}\right] P_{l}+\left[t_{r}-R_{r}\left(R_{l}\right)^{-1} t_{l}\right]

由右相机到左相机得刚体变换可表示为:

P_{r}=R P_{l}+t

由于旋转矩阵是正交矩阵,因此R^{-1}=R^{T},则:

\left\{\begin{array}{c} R=R_{r} R_{l}^{T} \\ t=t_{r}-R_{r} R_{l}^{T} t_{l}=t_{r}-R t_{l} \end{array}\right.

通过对Fusiello校正法我们知道,只是将右相机旋转到左相机会有较大相机畸变,同时也会减少公共面积,因此Bouguet法证明将左右相机各旋转一半可以使图像畸变最小,公共面积最大。因此我们先将其各旋转一半使其共面,再构建公共旋转矩阵使其行对准。
共面:将右相机相对左相机得旋转拆分为左右相机的合成矩阵,即:

r_{l}=R^{\frac{1}{2}}, r_{r}=R^{-\frac{1}{2}}

行对准:建立行对准矩阵R_{rect},使其xyz轴相对应,极点在无穷远处。具体过程与Fusiello过程一致不再赘述,构建方程形式为:R_{\text {rect }}=\left[e_{1}, e_{2}, e_{3}\right]^{T},联立上述变换矩阵,可得左右旋转矩阵:

\begin{array}{l} R_{l}=R_{\text {rect }} r_{l} \\ R_{r}=R_{\text {rect }} r_{r} \end{array}

类似的,可以获得最后的转换矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值