世界座標系到攝像機座標系的矩陣變換推導過程

MarsCactus發表於2024-11-10

以下是世界座標系到攝像機座標系的矩陣變換推導過程:

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)$。

透過以上推導過程,我們就得到了世界座標系到攝像機座標系的矩陣變換關係及相應的變換矩陣,這在計算機圖形學、計算機視覺等領域的三維場景處理、影像渲染等方面有著重要的應用。

相關文章