视觉SLAM14讲笔记02:ch5针孔,双目相机模型

相机

相机将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)的过程能够用一个几何模型进行描述。这个模型有很多种,其中最简单的称为针孔模型。针孔模型是很常用,而且有效的模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系。在本书中我们用一个简单的针孔相机模型来对这种映射关系进行建模。同时,由于相机镜头上的透镜的存在,会使得光线投影到成像平面的过程中会产生畸变。因此,我们使用针孔和畸变两个模型来描述整个投影过程。

针孔相机模型根据三角形相似关系

视觉SLAM14讲笔记02:ch5针孔,双目相机模型
Zf=XX=YY\frac{Z}{f}=-\frac{X}{X^{\prime}}=-\frac{Y}{Y^{\prime}}
其中负号表示成的像是倒立的。为了简化模型,我们把可以成像平面对称到相机前方,和三维空间点一起放在摄像机坐标系的同一侧,如图5-2中间的样子所示。这样做可以使式子更加简。
X=fXZY=fYZ\begin{array}{l} X^{\prime}=f \frac{X}{Z} \\ Y^{\prime}=f \frac{Y}{Z} \end{array}
式(5.3)描述了点 P 和它的像之间的空间关系。不过,在相机中,我们最终获得的是一个个的像素,这需要在成像平面上对像进行采样和量化。为了描述传感器将感受到的 光线转换成图像像素的过程,我们设在物理成像平面上固定着一个像素平面 $o-u-v $。 我 们在像素平面得到了 PP' 的像素坐标: [u,v]T[u, v]^{T}
像素坐标系“通常的定义方式是:原点 o’ 位于图像的左上角, 轴向右与 xx 轴平行, vv 轴向下与 yy 轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移。 我们设像素坐标在 uu 轴上缩放了α\alpha倍,在 vv 上缩放了 β\beta 倍。同时,原点平移了 [cx,cy]T\left[c_{x}, c_{y}\right]^{T} 那么,PP' 的坐标与像素坐标 [u,v]T[u, v]^{T} 的关系为:
{u=αX+cxv=βY+cy \left\{\begin{array}{l} u=\alpha X^{\prime}+c_{x} \\ v=\beta Y^{\prime}+c_{y} \end{array}\right.
αf\alpha f 合并成 fx,f_{x},βf\beta f 合并成 fy,f_{y}, 得:
{u=fxXZ+cxv=fyYZ+cy \left\{\begin{array}{l} u=f_{x} \frac{X}{Z}+c_{x} \\ v=f_{y} \frac{Y}{Z}+c_{y} \end{array}\right.
其中, ff 的单位为米, α,β\alpha, \beta 的单位为像素每米,所以 fx,fyf_{x}, f_{y} 的单位为像素。把该式写成矩阵形式,用到齐次坐标,会更加简洁,像素点的归一化坐标:
x=(uv1)=1Z(fx0cx0fycy001)(XYZ)1ZKP x= \left(\begin{array}{l} u \\ v \\ 1 \end{array}\right)=\frac{1}{Z}\left(\begin{array}{lll} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right)\left(\begin{array}{l} X \\ Y \\ Z \end{array}\right) \triangleq \frac{1}{Z} \boldsymbol{K} \boldsymbol{P}

该式中,我们把中间的量组成的矩阵称为相机的内参数矩阵(Camera Intrinsics) KK .

双目相机模型

双目相机一般由左眼和右眼两个水平放置的相机组成。我们可以把两个相机都看作针孔相机。它们是水平放置的,意味两个相机的光圈中心都位于xx轴上。它们的距离称为双目相机的基线(Baseline, 记作 bb ),是双目的重要参数。
视觉SLAM14讲笔记02:ch5针孔,双目相机模型
理想情况下,由于左右相机只有在xx轴上有位移, 因此PP的像也只在xx轴(对应图像的uu轴)上有差异。根据相似关系
zfz=buL+uRb \frac{z-f}{z}=\frac{b-u_{L}+u_{R}}{b}
整理得
z=fbd,d=uLuR z=\frac{f b}{d}, \quad d=u_{L}-u_{R}

这里dd为左右图的横坐标之差,称为视差(Disparity)。根据视差,我们可以估计一 个像素离相机的距离。视差与距离成反比。然由视差计算深度的公式很简洁,但视差dd本身的计算却比较困难。我们需要确切地知道左眼图像某个像素出现在右眼图像的哪一个位置(即对应关系),这件事亦属于 “人类觉得容易而计算机觉得困难”的事务。