世界坐标系到摄像机坐标系的矩阵变换推导过程

以下是世界坐标系到摄像机坐标系的矩阵变换推导过程:

1. 设定相关坐标系及向量表示

  • 世界坐标系:我们设世界坐标系为 $O_w - X_wY_wZ_w$,其中 $O_w$ 为世界坐标系的原点,$X_w$、$Y_w$、$Z_w$ 为三个坐标轴方向。在世界坐标系下,空间中任意一点 $P$ 的坐标可以表示为 $(x_w, y_w, z_w)$。
  • 摄像机坐标系:设摄像机坐标系为 $O_c - X_cY_cZ_c$,其中 $O_c$ 为摄像机坐标系的原点,通常位于摄像机的光心位置;$X_c$、$Y_c$、$Z_c$ 为摄像机坐标系的三个坐标轴方向。在摄像机坐标系下,点 $P$ 的坐标将表示为 $(x_c, y_c, z_c)$。

2. 确定变换关系所需的向量及参数

  • 摄像机位置向量:设摄像机在世界坐标系中的位置为向量 $\vec{C}$,其坐标表示为 $(C_x, C_y, C_y)$,即 $\vec{C} = (C_x, C_y, C_z)$,它表示从世界坐标系原点 $O_w$ 指向摄像机坐标系原点 $O_c$ 的向量。
  • 摄像机朝向向量:设摄像机的朝向(也就是其观察方向)为向量 $\vec{Z_c}$,它是从摄像机光心指向观察目标点的方向向量,通常需要进行归一化处理,使其长度为 $1$。
  • 摄像机向上向量:设摄像机的向上方向向量为 $\vec{Y_c}$,它定义了摄像机在垂直方向上的姿态,同样也需要进行归一化处理。

3. 推导变换矩阵的步骤

步骤一:确定摄像机坐标系的坐标轴在世界坐标系下的表示

  • 确定 $Z_c$ 轴在世界坐标系下的表示
    • 由于摄像机朝向向量 $\vec{Z_c}$ 已经确定了摄像机坐标系的 $Z$ 轴方向,并且我们知道它是从摄像机光心指向观察目标点的方向向量,所以在世界坐标系下,它的坐标表示就是其本身,即 $\vec{Z_c} = (Z_{cx}, Z_{cy}, Z_{cz})$。
  • 确定 $X_c$ 轴在世界坐标系下的表示
    • 我们可以通过摄像机向上向量 $\vec{Y_c}$ 和摄像机朝向向量 $\vec{Z_c}$ 的叉积来得到摄像机坐标系的 $X$ 轴方向向量 $\vec{X_c}$。根据向量叉积的定义,$\vec{X_c} = \vec{Y_c} \times \vec{Z_c}$。
    • 设 $\vec{Y_c} = (Y_{cx}, Y_{cy}, Y_{cz})$,通过向量叉积公式计算可得:
      $\vec{X_c} = \left|\begin{array}{ccc}\vec{i}&\vec{j}&\vec{k}\Y_{cx}&Y_{cy}&Y_{cz}\Z_{cx}&Z_{cy}&Z_{cz}\end{array}\right|$
      展开可得:
      $\vec{X_c} = (Y_{cy}Z_{cz} - Y_{cz}Z_{cy})\vec{i} + (Y_{cz}Z_{cx} - Y_{cx}Z_{cz})\vec{j} + (Y_{cx}Z_{cy} - Y_{cy}Z_{cx})\vec{k}$
      即 $\vec{X_c} = (X_{cx}, X_{cy}, X_{cz})$,这就是 $X_c$ 轴在世界坐标系下的表示。
  • 确定 $Y_c$ 轴在世界坐标系下的表示
    • 为了得到摄像机坐标系的 $Y$ 轴方向向量 $\vec{Y_c}$ 在世界坐标系下的准确表示,我们可以通过摄像机朝向向量 $\vec{Z_c}$ 和已经得到的 $X_c$ 轴方向向量 $\vec{X_c}$ 的叉积来计算,即 $\vec{Y_c} = \vec{Z_c} \times \vec{X_c}$。
    • 按照向量叉积公式进行计算,可得到 $\vec{Y_c}$ 在世界坐标系下的具体坐标表示。

步骤二:构建从世界坐标系到摄像机坐标系的变换矩阵

  • 我们知道,一个点在不同坐标系下的坐标变换可以通过一个线性变换矩阵来实现。对于从世界坐标系到摄像机坐标系的变换,其变换矩阵 $M$ 是一个 $4\times4$ 的矩阵(考虑到齐次坐标的情况,在计算机图形学等领域通常使用齐次坐标来进行坐标变换的统一处理)。
  • 变换矩阵 $M$ 的形式如下:

$\left[\begin{array}{cccc}X_{cx}&X_{cy}&X_{cz}&0\Y_{cx}&Y_{cy}&Y_{cz}&0\Z_{cx}&Z_{cy}&Z_{cz}&0\- \vec{C} \cdot \vec{X_c}&- \vec{C} \cdot \vec{Y_c}&- \vec{C} \cdot \vec{Z_c}&1\end{array}\right]$

其中,前面三行三列的子矩阵表示了世界坐标系到摄像机坐标系坐标轴的旋转关系,最后一行的前三个元素是通过摄像机位置向量 $\vec{C}$ 与摄像机坐标系各坐标轴方向向量的点积得到的,用于实现平移变换。

4. 坐标变换的实际应用

  • 当我们要将世界坐标系下的点 $P(x_w, y_w, z_w)$ 变换到摄像机坐标系下时,首先将点 $P$ 的坐标表示为齐次坐标形式,即 $\left[\begin{array}{c}x_w\y_w\z_w\1\end{array}\right]$。
  • 然后通过矩阵乘法,将其与变换矩阵 $M$ 相乘:

$\left[\begin{array}{c}x_c\y_c\z_c\1\end{array}\right] = M \times \left[\begin{array}{c}x_w\y_w\z_w\1\end{array}\right]$

通过上述矩阵乘法运算,就可以得到点 $P$ 在摄像机坐标系下的坐标 $(x_c, y_c, z_c)$。

通过以上推导过程,我们就得到了世界坐标系到摄像机坐标系的矩阵变换关系及相应的变换矩阵,这在计算机图形学、计算机视觉等领域的三维场景处理、图像渲染等方面有着重要的应用。

posted @ 2024-11-10 01:13  MarsCactus  阅读(50)  评论(0编辑  收藏  举报