カメラモデル

0

1 概要

カメラモデル(camera model)とは,コンピュータビジョンで3次元シーン中の点$\bm{X}$が放つ光線が,ピンホールを通過した後,撮像素子上の2次元座標のどの画素$\bm{x}_c$に投影されたのかを,幾何的にモデル化する.また,透視投影カメラモデルでは省略されてるレンズ歪みには,画像平面上での放射状歪み(radial distortion)を標準的にモデルとして使用する.

以降の構成を述べる.2節では,透視投影カメラモデルの同次座標系を用いた計算・活用方法を2.1- 2.3節にかけて,3つの部品に分解して説明したのちに,2.4節で統合する.3節では,画像のレンズによる放射状歪み(radial distortion)のモデル化を行う.カメラモデルの各パラメータは,カメラキャリブレーションやエピポーラ幾何などを通して推定することができ,推定されて以降は,画像からの3次元復元問題を解くためにカメラモデルの幾何を利用できる.

2 透視投影カメラモデル

コンピュータビジョンでよく使用されるカメラモデルは,3次元の透視投影(perspective projection)を用いたモデルである.実際のカメラをシンプルに近似したピンホールカメラモデル(pinhole camera model)を元に,透視投影カメラモデルは定式化される.ピンホールモデルでは,レンズの歪みもなくアパーチャも点と仮定した「幾何関係を容易に捉えやすい簡素なカメラモデル」である.レンズによる「放射歪み(3節)」が存在しない状態(もしくは校正で歪みを除いた状態)において,ピンホールカメラモデルは成立するとも言える.

図1 ピンホールカメラモデル

図1は,透視投影モデルを3次元空間上に示したものである.$C$はカメラ中心(camera center)であり,透視投影モデルの原点でありピンホールに相当する.実際の像はピンホールの後ろ側に上下逆向きに投影されているが,(大学の講義でご存知の通り)透視投影モデルではカメラ中心(=ピンホール)の前方に仮想的に画像平面(image plane)が存在するとみなし,その仮想画像平面を画像平面として用いる.

また,光線$\bm{X}\bm{C}$が画像平面と交わる点が,画像上の投影点$\bm{x}_c$に相当する.

概要の最後にも述べたが,透視投影カメラモデルによる3D-2D間の写像は,以下の3つの写像が順に適用されたものと見なすことが多い:

  • (2.1節 3D-3D ) 回転行列$\bm{R}$と並進ベクトル$\bm{t}$により,ワールド座標系の点をカメラ座標系の同一点へ変換.
  • (2.2節 3D-2D)カメラ原点を中心とした座標系での,3次元空間から画像上の2次元空間への透視投影.
  • (2.3節 2D-2D) 連続的な画像座標系を,離散的な画素に(量子化して)割り当てる写像.

それでは3つの変換を順に紹介し,その後2.4節でそれらを1つの変換式にまとめて,透視投影モデルの一般形として示す.

2.1 座標変換

ここでは,ワールド座標系を,カメラ中心を原点としたカメラ中心座標系に変換する座標変換についてまず述べる.

図2 透視投影モデルにおける座標系の変換.

図2のように,カメラで観測している任意の3Dシーンは,毎回別の任意の場所が3D空間の原点となっている.透視投影変換が行えるのは,図1に図2で示したように,カメラ中心$C$が原点で,画像平面($X,Y)$がカメラフレームと平行で,$Z$方向がレンズの主軸方向である「カメラ中心座標系」である.従って,ワールド座標系上の点を,このカメラ中心座標系上の点に変換する変換式を以下の式のように用意しておくことにする:

$$ \bm{X_c} = \bm{R_c^T}(\tilde{\bm{X}}-\tilde{\bm{C}}) = \bm{R}\tilde{\bm{X}}+ \bm{t} \tag{2.1}$$

ここで$\bm{R} = \bm{R}^{\mathrm{T}}_c$,および$\bm{t}=- \bm{R}\tilde{\bm{X}}$は,3Dシーン上のワールド座標系で示される点を,カメラ中心の座標系の点に変換するための,回転行列と並進ベクトルをそれぞれ示す.式(2.1)は,同次座標系の線形写像を用いて以下のように書くことができる:

$$ \left[
\begin{array}{l}
X_c \\ Y_c \\ Z_c \\ 1
\end{array}
\right] = \left[
\begin{array}{rr}
\bm{R} & \bm{t} \\
0^{\mathrm{T}} & 1 \\
\end{array}
\right] \left[
\begin{array}{l}
X \\ Y \\ Z \\ 1
\end{array}
\right]$$

2.2 透視投影

2.1の変換でカメラ座標系に座標系が変換されたので,次に透視投影変換を用いた光線の投影について定式化する.焦点距離$f$であるカメラによってシーン中の点$(X_c,Y_c,Z_c)$のカメラの画像平面上にの位置$(x_c,y_c)$に投影されるとき,以下の関係が成り立つ(図2):

$$ \frac{x_c}{f} = \frac{X_c}{Z_c} , \frac{y_c}{f} = \frac{Y_c}{Z_c} \tag{2.2} $$

この2つの方程式を1つに合わせて,以下のように記述できる;

$$ Z_c \left[
\begin{array}{l}
x_c \\ y_c \\ 1
\end{array}
\right] = \left[
\begin{array}{ccc}
f & 0 & 0 & 0 \\
0 & f & 0 & 0 \\
   0 & 0 & 1 & 0
\end{array}
\right] \left[
\begin{array}{l}
X_c \\ Y_c \\ Z_c \\ 1
\end{array}
\right]
$$

ここでfにより定義される$3 \times 4$の透視投影行列を$P_p$と表記することとする.$f=1$の際の画像平面上の点のは,正規化画像座標平面にあるとみなす(図2).

2.3 画像平面上での量子化

現在のデジタルカメラにおいては,CCD/CMOSなどのデバイスにより,画像センサー上の2次元画素配列に沿って,取得した画像がデジタル化される.

各パラメータについてまず述べる.画像センサーごとに縦横単位長や幅と高さの長さは違うので,それを表現するための縦横のスケール比率をそれぞれ$m_x$と$m_y$とする.また,センサー上のコーナー(左上)を原点とし,レンズの主軸が画像平面と交差する主軸点は座標$[x_0, y_0]^{\mathrm{T}}$にあるとする.さらにセンサーのx軸とy軸は完全な直交系では作れないので,真上から見た画像平面の傾きをskew $s$で表現する.

以上のパラメータを元に,2.1と2.2の2つの変換を経て得た投影点$(x_c,y_c)$を,センサー上で画像量子化した結果得られる点$(x,y)$は,以下の変換で得ることができる.

$$ \left[
\begin{array}{r}
x \\ y \\ 1
\end{array}
\right] = \left[
\begin{array}{ccc}
m_x & s & x_0 \\
0 & m_y & y_0 \\
   0 & 0 & 1
\end{array}
\right] \left[
\begin{array}{r}
x_c \\ y_c \\ 1
\end{array}
\right]
$$

2.4 カメラモデルの最終形:3つの射影を結合

以上の2.1~2.3節の3つの変換を順に適用すると,シーン上の3D点$\bm{X}$を画像平面上の2D点\bm{x}に変換を以下の1つの変換式で表すことができる.

$$ \lambda \bm{x} = \bm{P}_c \bm{P}_p \bm{P}_r \bm{X}$$

ここで $$\bm{P}_c \bm{P}_p \bm{P}_r = \bm{P} $$と1つにまとめると,以下のシンプルな形で変換式を書き直すことができる.

$$\lambda \bm{x} = \bm{P} \bm{X} \tag{2.3}$$

この行列$\bm{x}P$をカメラ行列(camera matrix)と呼ぶ.

皆さんご存知の通りカメラ行列は,以下のように内部パラメータ行列$K \times$ 外部パラメータ行列$[ \bm{R}| \bm{t}]$の2つの積として分解して考える.

$$ \bm{P} = \bm{K} [ \bm{R}| \bm{t}] \tag{2.4}$$

ここで,行列$\bm{K}$を構成する内部パラメータは2.2節と2.3節のカメラ座標系におけるカメラ内部での写像を合成したもので,$K$は以下の通りの構成である:

$$K = \left[
\begin{array}{ccc}
\alpha_x & s & x_0 \\
0 & \alpha_y & y_0 \\
   0 & 0 & 1
\end{array}
\right]
$$

ここで,$\alpha_x = f m_x$と$\alpha_y = f m_y$は,ピクセル数単位で表された$x$と$y$方向の焦点距離である.

最後に,式(2.3)を展開した形を以下にまとめておく:

$$ \lambda \left[
\begin{array}{c}
x \\ y \\ 1
\end{array}
\right] =
\left[
\begin{array}{ccc}
\alpha_x & 0 & 0 \\
0 & \alpha_t & 0 \\
   0 & 0 & 1
\end{array}
\right] \left[
\begin{array}{c}
X_c \\ Y_c\\ Z_c \\ 1
\end{array}
\right]
$$

OpenCVのドキュメントのCamera Calibration and 3D reconstructionに,この透視投影カメラモデルの展開形(各パラメータが全てわかる形)が同じように表記 +解説されている.

ちなみに2019年時点のOpenCV(4系)では,魚眼カメラモデルのみskewパラメータが導入されており,通常のカメラモデルでは内部パラメータにskewが用いられていないことに注意.また,内部パラメータ行列をcameraMatrixとOpenCVの変数では名付けられていることなどにも注意されたい.

3 放射状歪みのモデル

2節で基本的なカメラモデルは完成しているが,唯一そこではまだ表現されていない「画像のレンズ歪み」のモデル化についてこの3節にまとめる.

レンズ歪みによく用いられるのは,放射状歪みを以下の多項式でモデル化したものである:

$$ \left[
\begin{array}{r}
x_{nd} \\ y_{nd}
\end{array}
\right] =
\left[ \begin{array}{r} x_{n} \\ y_{n} \end{array} \right]
+
\left[ \begin{array}{r} x_{n} \\ y_{n} \end{array} \right] (k^1 r^2 + k_2 r^4) $$

ここで $[x_{n}, \ y_{n}]^{\mathrm{T}}$は歪み除去後の,正規化座標での画素位置を指し,$[x_{nd}, \ y_{nd}]^{\mathrm{T}}$は歪みがある状態での画像位置を指す.また,$k_1$ $k_2$はキャリブレーションで求める放射状歪みモデルのパラメータで,$r = \sqrt{x^2_n+y^2_n}$である.

skewがゼロであると仮定できる場合,上の正規化座標系における関係式だったものが以下のように通常の画素位置でも表現できる:

$$ \left[
\begin{array}{r}
x_{d} \\ y_{d}
\end{array}
\right] =
\left[ \begin{array}{r} x \\ y \end{array} \right]
+
\left[ \begin{array}{r} (x-x_0) \\ (y-y_0) \end{array} \right] (k^1 r^2 + k_2 r^4) $$

$[x, \ y]^{\mathrm{T}}$はピンホールモデル(2節)で推定される標準的な画素の座標を示し,それを変換したものが左辺$[x_{d}, \ y_{d}]^{\mathrm{T}}$である.

4 まとめ

デジタル画像に用いられるカメラモデルは,透視投影モデル(2節)と放射状歪みモデル(3節)の2つから構成される.実用上は同次座標系において外部パラメータと内部パラメータの2つ行列(線形写像)の積として扱われるのがカメラモデルである.それが,実際は3つの写像の合成であることを,2.1-2.3節で紹介し,また,画像のレンズ歪みのモデル化について3節で説明した(この紹介手順は[1]の節構成に従っている).

References

  • N. Pears, L. Yonghuai, and B. Peter, 3D Imaging, Analysis and Applications, Springer, 2012
  • R. Kletter. Concise Computer Vision: An Introduction into Theory and Algorithms. 1st edition, Springer, 2014.
  • デジタル画像処理[改訂新版], 画像情報教育振興協会, 2015.
0