Skip to content

相机的内外参数

世界坐标系投影到图像平面

将三维世界中的点 P 转换到相机坐标系,再映射到图像平面,涉及到几何变换和摄像机内部参数的应用。这个过程可以分为两个主要步骤:首先是从世界坐标系转换到相机坐标系,然后从相机坐标系投影到图像平面。

步骤 1: 从世界坐标系到相机坐标系

  1. 定义变换矩阵: 相机坐标系相对于世界坐标系的位置和朝向可以通过一个旋转矩阵 \(R\) 和一个平移向量 \(t\) 来描述。这个变换可以用一个 \(4 \times 4\) 的齐次变换矩阵表示: $$ T = \begin{bmatrix} R & t \ 0 & 1 \end{bmatrix} $$

其中,\(R\) 是一个 \(3 \times 3\) 的旋转矩阵,\(t\) 是一个 \(3 \times 1\) 的平移向量。

  1. 应用变换: 为了将点 P 的世界坐标 \((p_x, p_y, p_z)\) 转换到相机坐标系,首先需要将这个点转换为齐次坐标 \((p_x, p_y, p_z, 1)\)。然后,用变换矩阵 T 乘以这个齐次坐标: $$

\begin{bmatrix} X_c \ Y_c \ Z_c \ 1 \end{bmatrix} = T \cdot \begin{bmatrix} p_x \ p_y \ p_z \ 1 \end{bmatrix}

$$ 其中,\((X_c, Y_c, Z_c)\) 是点$ P$ 在相机坐标系中的坐标。

步骤 2: 从相机坐标系到图像平面

  1. 内参矩阵: 相机的内参矩阵 K 定义了相机的焦距、图像中心等内部特性,通常形式如下: $$

K = \begin{bmatrix} f_x & 0 & c_x \ 0 & f_y & c_y \ 0 & 0 & 1 \end{bmatrix}

$$ 其中,\(f_x, f_y\) 是沿 \(x\)\(y\) 轴的焦距,\(c_x, c_y\)是图像平面中心的坐标。

  1. 投影和缩放: 相机坐标系中的点 \((X_c, Y_c, Z_c)\) 可以通过内参矩阵 \(K\) 投影到图像平面: $$

\begin{bmatrix} u \ v \ 1 \end{bmatrix} = K \cdot \begin{bmatrix} X_c / Z_c \ Y_c / Z_c \ 1 \end{bmatrix}

$$ 这里 \((u, v)\) 是点\(P\) 在图像平面上的像素坐标。

通过以上步骤,您可以实现从世界坐标系到相机坐标系再到图像平面的转换。这些步骤涵盖了使用相机模型和变换矩阵来进行空间坐标转换的基本方法。

将图像中的像素点 \((u, v)\) 投影回到三维世界坐标系是一个比较复杂的问题,因为从二维图像到三维空间的映射是不唯一的。但是,如果我们知道这个像素在三维空间中的深度 \(Z_w\)(即点到相机的距离),我们就可以计算出这一点在三维世界坐标系中的位置。下面是具体步骤和公式:

图像平面投影到世界坐标系

步骤 1: 从图像平面到相机坐标系

  1. 使用内参矩阵的逆: 首先,使用相机的内参矩阵 \(K\) 将图像平面上的像素坐标 \((u, v)\) 转换回相机坐标系。这可以通过内参矩阵的逆 \(K^{-1}\) 实现: $$

\begin{bmatrix} X_c \ Y_c \ 1 \end{bmatrix} = K^{-1} \cdot \begin{bmatrix} u \ v \ 1 \end{bmatrix}

$$ 得到的 (X_c, Y_c, 1) 是在相机坐标系中,点的位置相对于相机焦点的缩放表示。

  1. 计算实际坐标: 获得的 \(X_c\)\(Y_c\) 是缩放后的值,实际坐标需要用到深度 \(Z_w\)(假设已知)来确定: $$

X_c = X_c \cdot Z_w, \quad Y_c = Y_c \cdot Z_w

$$ 这里 Z_c 通常被假定等于 Z_w。

步骤 2: 从相机坐标系到世界坐标系

  1. 定义逆变换矩阵: 既然点 \((X_c, Y_c, Z_w)\) 已在相机坐标系中确定,要转换回世界坐标系,需要逆向应用之前的相机到世界坐标系的变换。这需要用到 \(T\) 的逆,通常表示为: $$

T^{-1} = \begin{bmatrix} R^T & -R^T \cdot t \ 0 & 1 \end{bmatrix}

$$ 其中,\(R^T\) 是旋转矩阵的转置,\(-R^T \cdot t\) 表示逆平移。

  1. 应用逆变换: 使用 \(T^{-1}\)\((X_c, Y_c, Z_w, 1)\) 转换回世界坐标系: $$

\begin{bmatrix} p_x \ p_y \ p_z \ 1 \end{bmatrix} = T^{-1} \cdot \begin{bmatrix} X_c \ Y_c \ Z_w \ 1 \end{bmatrix}

$$ 得到的 \((p_x, p_y, p_z)\) 是点 \((u, v)\) 在世界坐标系中的位置。

通过以上步骤,您可以将图像平面的像素点根据已知的深度信息投影回到三维世界坐标系。这个过程需要知道相机的内部参数(内参矩阵)、相机在世界坐标系中的位置和方向(外参),以及深度信息。