技术基础知识汇总—摄像机几何(外参和畸变)

132 阅读2分钟

所谓摄像机标定,就是通过算法计算出摄像机的内外参

image.png

如果大家都以摄像机坐标系作为参考坐标系,那么当存在多个摄像机时,或者我们摄像机是运动的情况,就很难拿到统一标准。我们需要将摄像机坐标系描述 3 维物体的空间信息是否方便。所谓外参就是将物体从世界坐标系转摄像机坐标系,然后再由内参将摄像机坐标系的点转换为 2 成像平面的点。

P=[RT01]PwP = \begin{bmatrix} R & T\\ 0 & 1 \end{bmatrix} P_w
  • 这里下标 ww 表示世界坐标系
  • 其实这里之所以用到齐次坐标,是因为平移(T)并不是一个线性变换,无法用 3×33 \times 3 的矩阵来对向量 (x,y,z)(x,y,z) 进行线性变换得到
P=K[I0]P=K[I0]Pw=K[RT]Pw=MPwP^{\prime} = K \begin{bmatrix} I & 0 \end{bmatrix} P = K \begin{bmatrix} I & 0 \end{bmatrix} P_w = K \begin{bmatrix} R & T \end{bmatrix} P_w = MP_w
  • 之所以叫作为外参是因为这个参数和摄像机姿态有关,而和摄像机自身无关,所以叫做外参
  • 这里 KK 是一个 3×33 \times 3 矩阵
  • II 是一个 3×33 \times 3 单位阵,也就是对象线为 1 的矩阵
  • 00 是一个 3×13 \times 1 的列向量
  • PPPwP_w 都是一个 4×14 \times 1 的列向量
  • MM 是一个 3×43 \times 4 的投影矩阵,也就是将世界坐标系下的点投影到像素平面上 PP^{\prime} 的点

畸变

  • 径向畸变,径向畸变来自于透镜形状,分为桶形畸变、枕形畸变
  • 切向畸变,切向畸变来自整个摄像机的组装过程,切向畸变是透镜与成像平面不完全平行的制造缺陷造成的

image.png

摄像机径向和切向畸变模型

对于归一化平面上的点(x,y,1) 由于畸变影响最终为 xdistorted,ydistortedx_{distorted},y_{distorted}

xdistorted=x1+k1r2+k2r4+k3r61+k4r2+k5r4+k6r6+2p1xy+p2(r2+2x2)x_{distorted} = x \frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6} + 2 p_1 xy + p_2(r^2 + 2x^2)
ydistorted=y1+k1r2+k2r4+k3r61+k4r2+k5r4+k6r6+2p2xy+p1(r2+2y2)y_{distorted} = y \frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6} + 2 p_2xy + p_1(r^2 + 2y^2)
r2=x2+y2r^2 = x^2 + y^2

对于廉价的网络摄像头,我们一般使用前两个径向畸变参数 k1k_1k2k_2 就足够了。对于高度畸变的摄像机如鱼眼镜头,我们可以使用第三个径向畸变参数 k1,k2,k3k_1, k_2, k_3

P=MPw=[m1m2m3]Pw=[m1Pwm2Pwm3Pw](m1Pwm3Pw,m2Pwm3Pw)P^{\prime} = MP_w = \begin{bmatrix} m_1\\ m_2\\ m_3 \end{bmatrix} P_w = \begin{bmatrix} m_1P_w\\ m_2P_w\\ m_3P_w \end{bmatrix} \rightarrow \left( \frac{m_1P_w}{m_3P_w}, \frac{m_2P_w}{m_3P_w} \right)

这里

M=[m1m2m3]M = \begin{bmatrix} m_1 \\ m_2 \\ m_3 \end{bmatrix}

这里要说的是任意给一个 MM 我们是否能够判断

投影矩阵

  • 什么样的矩阵 MM 才是投影矩阵呢? 接下来我们就来看一看
M=K[RT]=[KRKT]=[Ab]M = K\begin{bmatrix}R & T \end{bmatrix} = \begin{bmatrix} KR & KT \end{bmatrix} = \begin{bmatrix}A & b \end{bmatrix}
A=[a1Ta2Ta3T]A = \begin{bmatrix} a_1^T \\ a_2^T \\ a_3^T \end{bmatrix}

这里之所以写成 aiTa_i^T 就是想将 aia_i 写成一个列向量,那么 M=(A,b)M=(A,b) 为一个 3×43 \times 4 的矩阵

  • MM 是透视投影矩阵的一个充分必要条件是 Det(A)0Det(A) \neq 0
  • MM 是零倾斜透视投影矩阵的一个充分必要条件是 Det(A)0Det(A) \neq 0 且满足