不同的坐标系
世界坐标系\((X_w,Y_w,Z_w)\):目标物体位置的参考系。除了无穷远,世界坐标可以根据运算方便与否自由放置,单位为长度单位如\(mm\),在双目视觉中世界坐标系主要有三个用途:
- 标定时确定标定物的位置;
- 作为双目视觉的系统参考系,给出两个摄像机相对世界坐标系的关系,从而求出相机之间的相对关系;
- 作为重建得到三维坐标的容器,存放重建后的物体的三维坐标。世界坐标系是将看见中物体纳入运算的第一站
摄像机坐标系\((X_c,Y_c,Z_c)\):摄像机站在自己角度上衡量的物体的坐标系。摄像机坐标系的原点在摄像机的光心上,\(z\)轴与摄像机光轴平行。它是与拍摄物体发生联系的桥头堡,世界坐标系下的物体需先经历刚体变化转到摄像机坐标系,然后和图像坐标系发生关系。单位为长度单位如\(mm\)
图像坐标系\((x,y)\):以CCD图像平面的中心为坐标原点,为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。图像坐标系是用物理单位(例如\(mm\))表示像素在图像中的位置
像素坐标系\((u,v)\):以 CCD 图像平面的左上角顶点为原点,为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,是我们真正从相机内读取到的信息所在的坐标系。像素坐标系就是以像素为单位的图像坐标系。
如上图所示,需要一个空间点X映射到一个图像点x(3维->2维)
\[(X,Y,Z)^T\rightarrow(\frac{fX}{Z},\frac{fY}{Z})^T
\]
根据右上图得到下面的变换
\[\left(
\begin{matrix}
X\\Y\\Z\\1
\end{matrix}
\right)
\rightarrow
\left(
\begin{matrix}
fX\\fY\\Z
\end{matrix}
\right)
=
\left[
\begin{matrix}
f\quad\qquad\qquad0\\
\qquad f\quad\qquad 0\\
\qquad\qquad 1\quad 0
\end{matrix}
\right]
\left(
\begin{matrix}
X\\Y\\Z\\1
\end{matrix}
\right)
\]
这个结论是将图像平面的原点设立在主轴与图像平面的交点上,而实际上默认的图像坐标系应该是位于图像的左上角,向下为x轴向右为y轴,因此在这里进行一个坐标系调整
\[(X,Y,Z)^T \rightarrow(\frac{fX}{Z} + p_x, \frac{fY}{Z} + p_y)^T
\]
即
\[\left(
\begin{matrix}
X\\Y\\Z\\1
\end{matrix}
\right)
\rightarrow
\left(
\begin{matrix}
fX+Zp_x\\fY+Zp_y\\Z
\end{matrix}
\right)
=
\left[
\begin{matrix}
f&&p_x&0\\
&f&p_y&0\\
&&1&0
\end{matrix}
\right]
\left(
\begin{matrix}
X\\Y\\Z\\1
\end{matrix}
\right)
\]
即
\[K =
\left[
\begin{matrix}
f&&p_x\\
&f&p_y\\
&&1
\end{matrix}
\right]
\]
透视投影的核心步骤就是求透视矩阵
\[x = K[R\quad t]X\\\downarrow\\
\left[
\begin{matrix}
u\\v\\1
\end{matrix}
\right]=
\left[
\begin{matrix}
\alpha&s&u_0\\
0&\beta&v_0\\
0&0&1
\end{matrix}
\right]=
\left[
\begin{matrix}
r_{11}&r_{12}&r_{13}&t_x\\
r_{21}&r_{22}&r_{23}&t_y\\
r_{31}&r_{32}&r_{33}&t_z
\end{matrix}
\right]
\left[
\begin{matrix}
x\\y\\z\\1
\end{matrix}
\right]
\]
其中K为相机的内参,为一个3x3的矩阵,自由度为5.
s为其中刻画任何可能的传感器轴的倾斜
\(u_0,v_0\)是以像素坐标表达的光心C'的坐标,\(\alpha,\beta\)为水平与垂直方向上的焦距;
\([R t]\)为外参矩阵,为一个3x4的矩阵,自由度为6(三个旋转,三个平移)
此处\(x,X\)的坐标为齐次坐标
三种常用的投影模型:
- 针孔成像模型:可以简称为针孔模型,其成像特点是物体成像会近大远小,平行线会相交(考虑一条延伸到地平线的马路的照片)。这个模型对应的投影过程称之为透视投影。针孔成像模型又有多个称呼例如针孔透视投影模型、中心透视投影模型,均表示相同含义。
- 弱透视投影模型:针对于针孔成像模型做了进一步简化,物体投影时各个点与小孔的距离都用物体的平均距离代替,即不存在近大远小了,因为都是相同距离了。这样成像的大小就是成像平面与针孔距离d,以及物体与针孔距离D之间的比例决定了。这个模型对应的投影过程就称之为弱透视投影。
- 正交投影成像模型:在弱透视投影上进一步简化,让弱透视投影中仅存的比例为1,其效果等同于平行光线投射到成像平面上。这个模型对应的投影过程称之为正交投影。
各种摄像机模型的应用场合
- 正交投影
- 弱透视投影(在数学方面更简单)
- 透视投影(对3D到2D映射的建模更为准确)
总体上,相机成像可以分为四个步骤:刚体变换、透视投影、畸变校正和数字化图像
刚体变换(从世界坐标系到相机坐标系)
世界坐标系(\(x_w,y_w,z_w\)),也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由决定。
相机坐标系(\(x_c,y_c,z_c\)),也是一个三维直角坐标系,原点位于镜头光心处,x,y轴分别与像平面的两边平行,z轴为镜头光轴,与像平面垂直。
刚体变换只改变物体的空间位置(平移)和朝向(旋转),而不改变其形状,可以用两个变量来描述:
旋转矩阵R和平移向量t
\[\left[
\begin{matrix}
x_c\\y_c\\z_c
\end{matrix}
\right]
=R
\left[
\begin{matrix}
x_w\\y_w\\z_w
\end{matrix}
\right]+t
\]
齐次坐标下可写为:
\[\left[
\begin{matrix}
x\\y\\z\\1
\end{matrix}
\right]=
\left[
\begin{matrix}
R & t \\ 0^T & 1
\end{matrix}
\right]
\left[
\begin{matrix}
x_w\\y_w\\z_w\\1
\end{matrix}
\right]=
\left[
\begin{matrix}
r_{11}&r_{12}&r_{13}&t_x\\
r_{21}&r_{22}&r_{23}&t_y\\
r_{31}&r_{32}&r_{33}&t_z\\
0&0&0&1
\end{matrix}
\right]
\left[
\begin{matrix}
x_w\\y_w\\z_w\\1
\end{matrix}
\right]
\]
透视投影(从相机坐标系到图像坐标系)
透镜的成像可以抽象为下图
设f=OB表示透镜的焦距,m=OC为像距,n=AO为物距,有:
\[\frac{1}{f}=\frac{1}{m}+\frac{1}{n}
\]
一般地,由于物距远大于焦距,即n>>f,所有m$\approx $f,此时可以用小孔模型代替透镜成像。
\[\begin{cases}
x_u=-f\frac{x_c}{z_c}\\
y_u=-f\frac{y_c}{z_c}
\end{cases}
\]
齐次坐标下有
\[z_c
\left[
\begin{matrix}
x_u\\y_u\\1
\end{matrix}
\right]=
\left[
\begin{matrix}
f&0&0&0\\
0&f&0&0\\
0&0&1&0
\end{matrix}
\right]
\left[
\begin{matrix}
x_c\\y_c\\z_c\\1
\end{matrix}
\right]
\]
总体上来看,透视投影把相机坐标系中的点投影到理想图像坐标系,其变换过程仅与相机焦距f有关。
畸变矫正
理想的针孔成像模型确定的坐标变换关系均为线性的,而实际上,现实中使用的相机由于镜头中镜片因为光线的通过产生的不规则的折射,镜头畸变(lens distortion)总是存在的,即根据理想针孔成像模型计算出来的像点坐标与实际坐标存在偏差。畸变的引入使得成像模型中的几何变换关系变为非线性,增加了模型的复杂度,但更接近真实情形。畸变导致的成像失真可分为径向失真和切向失真两类:
畸变类型很多,总体上可分为径向畸变和切向畸变两类,径向畸变的形成原因是镜头制造工艺不完美,使得镜头形状存在缺陷,包括枕形畸变和桶形畸变等,可以用如下表达式来描述:
\[\partial_{xr}=x(k_1r^2+k_2r^4+k_3r^6+K)\\
\partial_{yr}=y(k_1r^2+k_2r^4+k_3r^6+K)
\]
切向畸变又分为薄透镜畸变和离心畸变等,薄透镜畸变则是因为透镜存在一定的细微倾斜造成的;离心畸变的形成原因是镜头是由多个透镜组合而成的,而各个透镜的光轴不在同一条中心线上。切向畸变可以用如下数学表达式来描述:
\[\partial_{xd}=2p_1xy+p_2(r^2+2x^2)+K\\
\partial_{yd}=2p_1(r^2+2y^2)+2p_2xy+K
\]
在引入镜头的畸变后,成像点从理想图像坐标系到真实图像坐标系的变换关系可以表示为:
\[x'=x+\partial_{xr}+\partial_{xd}\\
y'=y+\partial_{yr}+\partial_{yd}
\]
数字化图像
光线通过相机镜头后最终成像在感光阵列(CCD或CMOS)上,然后感光阵列将光信号转化为电信号,最后形成完整的图像。
我们用dx和dy分别表示感光阵列的每个点在x和y方向上物理尺寸,即一个像素是多少毫米,这两个值一般比较接近,但由于制造工艺的精度问题,会有一定误差,同样的,感光阵列的法向和相机光轴也不是完全重合,即可以看作成像平面与光轴不垂直。
用仿射变换来描述这个过程,如上图,O点是图像中心点,对应图像坐标(\(u_0,v_0\)),\(X_d-Y_d\)是真实图像坐标系,U-V是数字化图像坐标系,有:
\[u = u_0 + \frac{x_d}{dx} - \frac{y_dcot\theta}{dx}\\
v = v_0 + \frac{y_d}{dysin\theta}
\]
齐次坐标下有:
\[\left[
\begin{matrix}
u\\v\\1
\end{matrix}
\right]
=
\left[
\begin{matrix}
f_u & -f_ucot\theta & u_0\\
0 & \frac{f_v}{sin\theta} & v_0\\
0 & 0 & 1
\end{matrix}
\right]
\left[
\begin{matrix}
x_d\\y_d\\1
\end{matrix}
\right]
其中f_u=\frac{1}{dx},f_v=\frac{1}{dy}
\]
上式中的变换矩阵即为相机的内参数矩阵 K,其描述了相机坐标系中点到二维图像上点的变换过程。
综上所述,在不考虑镜头畸变的情况下,相机的整个成像过程可表示为:
\[z_c \left[
\begin{matrix}
u\\v\\1
\end{matrix}
\right]
=
\left[
\begin{matrix}
f_u & -f_ucot\theta & u_0\\
0 & \frac{f_v}{sin\theta} & v_0\\
0 & 0 & 1
\end{matrix}
\right]
\left[
\begin{matrix}
f & 0 & 0 & 0\\
0 & f & 0 & 0\\
0 & 0 & 1 & 0
\end{matrix}
\right]
\left[
\begin{matrix}
R & t \\
0^T & 1
\end{matrix}
\right]
\left[
\begin{matrix}
x_w\\y_w\\z_w\\1
\end{matrix}
\right]
\]
四个坐标系之间存在着下述关系 ( 矩阵依次左乘 ):