摄像机模型

本章是重点章节. 主要介绍两种摄像机模型: 1.光心在有穷点 2. 光心在无穷点, 也叫仿射摄像机

6.1 有穷摄像机

假设在相机坐标系下有一点X=(X,Y,Z)X=(X,Y,Z), 由于摄像机的平面在Z=fZ=f ff就是焦距, 那么(X,Y,Z)(X,Y,Z)就变到了(fX/Z,fY/Z)(fX/Z,fY/Z)(图像坐标系), 写成矩阵就是如下形式

(fXfYZ)=[f0f010](XYZ1)\left( \begin{matrix} fX\\ fY\\ Z\\ \end{matrix} \right) = \left[ \begin{matrix} f & & & &0 \\ & f & & &0 \\ & & & 1 &0 \end{matrix} \right] \left( \begin{matrix} X\\ Y\\ Z\\ 1 \end{matrix} \right)

到了图像坐标系以后, 我们继续转换到像素坐标系

(X,Y,Z,1)(X,Y,Z,1)就变成了(fX/Z+px,fY/Z+py)(fX/Z+p_x,fY/Z+p_y), (px,py)(p_x,p_y)就是摄像机的光心.

(fXfYZ)=[fpx0fpy010](XYZ1)\left( \begin{matrix} fX\\ fY\\ 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=[fpx0fpy010]K= \left[ \begin{matrix} f & & p_x&0 \\ & f & p_y&0 \\ & & 1 &0 \end{matrix} \right]

K就是摄像机的内参

最后, 我们还需要从世界坐标系转换到相机坐标系, 所以有一个旋转加平移的矩阵

(fXfYZ)=[fpx0fpy010][Rt01](XYZ1)\left( \begin{matrix} fX\\ fY\\ Z\\ \end{matrix} \right) = \left[ \begin{matrix} f & & p_x&0 \\ & f & p_y&0 \\ & & 1 &0 \end{matrix} \right] \left[ \begin{matrix} R & t \\ 0 & 1 \end{matrix} \right] \left( \begin{matrix} X\\ Y\\ Z\\ 1 \end{matrix} \right)

其中

[Rt01]\left[ \begin{matrix} R & t \\ 0 & 1 \end{matrix} \right]

就是相机的外参

相机内参有时候会加一个偏斜系数,因为相机的两个轴不是完全垂直的

K=[fspx0fpy010]K= \left[ \begin{matrix} f & s& p_x&0 \\ & f & p_y&0 \\ & & 1 &0 \end{matrix} \right]

把整个摄像机矩阵写成P, P就是一个3×43 \times 4的矩阵, 反过来任何一个3×43 \times 4的矩阵都可以是(有限)摄像机矩阵, 只要他左边3×33 \times 3的子矩阵不是奇异矩阵就可以.

如果该矩阵是奇异矩阵, 那么该摄像机模型就是仿射摄像机. 那么我们把P写成P=[Mp4]P=[M|p_4], pip_i代表列. 将摄像机性质总结如下:

  1. 光心位置C, M 不奇异, 则C=(M1p4,1)TC=(-M^{-1}p_4,1)^T. C是奇异矩阵则C=(d,0)TC=(d,0)^T
  2. p1,p2,p3p_1,p_2,p_3x,y,zx,y,z轴的消失点,p4p_4是相机坐标系的原点
  3. P的最后一行就是主平面
  4. P的第一第二行是轴平面
  5. 主点是Mm3Mm^3 m3m^3就是相机矩阵第三行

6.2.1 下面我们详细说明一下相机的各个关键词

相机中心 PP的rank是3, 那么它就有一个1维的零空间C, 满足PC=0PC=0, 这个C就是相机的中心 列向量 前三个列向量是消失点, 最后一个列向量是世界原点 行向量 行向量代表平面,如上节3,4所属

主平面 主平面就是通过相机中心,并且与成像平面平行的平面 主轴 主轴通过主平面并且与其垂直, 交点是相机中心

6.2.2 投影与反投影

空间点XX投影到x=PXx=PX, 图像点xx反投影就形成了一个射线X(λ)=P+x+λCX(\lambda)=P^{+}x + \lambda C

6.2.3 点的深度

空间点X=(X,Y,Z,T)TX=(X,Y,Z,T)^T, 摄像机矩阵P=[Mp4]P=[M|p_4], 我们假设P(X,Y,Z,T)T=w(x,y,1)P(X,Y,Z,T)^T=w(x,y,1)

depth(X;P)=sign(detM)wTm3depth(X;P)=\frac{ sign(det M)w }{T||m^3||}

已知P求摄像机中心

假设中心C=(X,Y,Z,T)TC=(X,Y,Z,T)^T, 有以下公式可以计算出CC

X=det([p2,p3,p4])X=det([p_2,p_3,p_4])

Y=det([p1,p3,p4])Y=-det([p_1,p_3,p_4])

Z=det([p1,p2,p4])Z=det([p_1,p_2,p_4])

T=det([p1,p2,p3])T=-det([p_1,p_2,p_3])

求摄像机内参和位姿R

P=[MMC]=K[RRC]P=[M|-MC]=K[R|-RC]. 所以直接把MMQRQR分解就可以了

6.3 无穷远处的摄像机

无穷远处摄像机的意思是PP左边3×33 \times 3的子矩阵是奇异的. 这种摄像机可以分成两类. 仿射摄像机和非仿射摄像机.

仿射摄像机的定义是PP最后一行是(0,0,0,1). 我们可以想象摄像机主点往无穷远处移动, 同时摄像机的焦距逐渐增大, 主点到了无穷远, 最后一行自然成了(0,0,0,1)(0,0,0,1)

6.3.2 仿射摄像机的误差

一个点, 投影到仿射摄像机和普通摄像机上的坐标是有差别的. 点离摄像机越远, 点越会偏离主点.

6.3.3 仿射摄像机矩阵的分解

其矩阵可以写成如下形式

[K2×2001][Rt01]\left[ \begin{matrix} K_{2 \times 2} & 0 \\ 0& 1 \end{matrix} \right] \left[ \begin{matrix} R & t \\ 0& 1 \end{matrix} \right]

左边的矩阵就是内参

6.3.4 广义的无穷远摄像机

如前文所述, 仿射摄像机就是摄像机的中心在无穷远, 主平面也在. 或者说PP左边3×3 3 \times 3 的子矩阵是奇异矩阵, 因为最后一行是0. 但是还有一种情况, 就是该子矩阵是奇异的, 但是最后一行不是0, 那就是说相机中心在无穷远, 但是主平面不在