カメラモデル(Camera Model)と透視投影(Perspective Projection)

1 カメラモデル(Camera Model)の概要

この記事では,透視投影 (Perspective Projection) モデルに基づいた,コンピュータビジョンで標準的に用いられるカメラモデル(Camera Model)について説明する.

コンピュータビジョンのカメラモデルでは,3次元シーン中の点$\bm{X}$が放つ光線が,ピンホールを通過した後,撮像素子上の2次元座標のどの画素$\bm{x}_c$に投影されたのかを,幾何的にモデル化するピンホールモデル(pinhole model)を,3Dシーン各点から反射した光がCCDなどのセンサー部への画像として撮像される際の基本的なモデルとして想定している.

そのピンホールモデルの画像投影平面を,光学中心であるぴーんホールを対称に上下左右反転させたモデルである透視投影カメラモデル(Perspective Projection Camera Model)が,コンピュータビジョンにおける「3Dシーンの各点から出る光の,画像平面上の2D点への投影モデル」として標準的に用いられる.透視投影モデルだけでは,レンズ歪みのモデル化がされていないので,そこで,画像平面上での放射状歪み(radial distortion)も,透視投影モデルに付け加えることで,最終的なカメラモデルとして使用するのが標準的である.

1.1 記事の構成

2節以降の記事の構成を述べる:

  • 2節:透視投影モデルの同次座標系を用いた計算・活用方法.
  • 3節:カメラモデルを構成するパラメータを3つの部品に分解して3.1- 3.3節にかけて説明する.3.4節でそれらの3パラメータを合成した最終モデル (※ [1]のモデル化にならっている).
  • 4節:放射状歪み(radial distortion)に伴う画像のレンズ歪みのモデル化.

カメラモデルの各パラメータは,カメラキャリブレーションやエピポーラ幾何などを通して推定することができ,推定されて以降は,画像からの3次元復元問題を解くためにカメラモデルの幾何を利用できる.

2 透視投影モデルによるカメラ幾何表現

コンピュータビジョンのカメラモデルには,撮影シーンの3次元点が,2次元の画像平面に透視投影 (perspective projection)されたことを模擬したカメラモデルである「透視投影モデル」を標準的に用いる.

透視投影モデルでは,実際のカメラを簡素に近似したピンホールカメラモデル (pinhole camera model)を元にして,そのモデルの投影面に投影されたシーン実像を,カメラ中心を基準に反転した画像平面が存在すると仮想的にみなす.

この2節では,まずピンホールカメラモデルを紹介したのち,それを元にした透視投影に基づくカメラモデルを3節で紹介する.

2.1 ピンホールカメラモデル (簡易的な実カメラの撮像モデル)

pinhole camera model
図1 ピンホールカメラモデル.ろうそくの各点の光がピンホールを通って,焦点距離fだけ先にある画像平面(image plane)に,ろうそくの像が(上下左右が反転して)撮像されている様子.ピンホールの前方fの距離にも,仮想的に画像平面(virtual image)が存在しているとみなすことができる.

ピンホールカメラモデルは,カメラを単純な四角形の箱とみなし,レンズ無しで光の入ってくる穴(ピンホール,光学中心)が点である(Apertureが極小である)とみなして,カメラによる撮像過程を簡素に抽象化したモデルである (図1).ピンホールを通った光が,カメラ箱内の焦点$f$の距離だけ先にある投影面(plane of projection)に結像する様子だけをシンプルに抽象化している.

このピンホールカメラモデルをアレンジする形で,計算機でよく用いられるカメラモデルである「透視投影モデル(2.2節)」が設計される.

2.2 透視投影によるカメラモデル

図2 透視投影カメラモデル.

前節のピンホールモデルは,投影画像が上下左右反対に投影されているので,我々人間としては直感的に少しわかりづらい.そこで,実際の計算機におけるカメラ幾何では,ピンホールモデルにおいて仮想画像平面を画像平面とみなすようにした透視投影カメラモデルが標準的に用いられる (図2).

図2の$C$はカメラ中心 (camera center)であり,ピンホールカメラモデルのピンホールに相当する.3Dシーン$\bm{X}$点の光が,そのまま仮想画像平面上の対応する点に透視投影されたとみなすことになるので「透視投影モデル」と呼ばれている.

これにより透視投影に基づいた,カメラ幾何モデルが使用でき,カメラ中心を基準とした3D点と2D点の単純な関係性が作れることが,図2の透視投影カメラモデルを用いる1番の利点である.絵画や漫画・イラストでは,通称「パース」と呼ばれているPerspectiveを短縮した呼び名の透視図法(遠近法の一種)がよく用いられているが,そのパースのような透視投影に相当するカメラモデルであるので,図2は「透視投影」カメラモデルと呼ばれる.

3 透視投影カメラモデルの「内部パラメータ」と「外部パラメータ」

図2の透視投影カメラモデルにおいては,光線$\bm{X}\bm{C}$が画像平面と交わる点が,画像平面上の投影点$\bm{x}_c$に相当する.1節の概要の最後にも述べたが,透視投影モデルによる3D-2D間の写像は,以下の3つの写像が順に適用されたものと見なすことが多い [1]:

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

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

3.1 3D座標系間「ワールド座標系」から「カメラ中心座標系」への剛体変換 (外部パラメータ)

透視投影カメラモデル
図3 透視投影カメラモデルにおける,3D座標系での「ワールド座標系」から「カメラ座標系」への剛体変換.カメラ座標系では3D->2Dの透視投影が可能になるので,ワールド座標系よりカメラ中心座標系に持ち込みたい.そこで,まずはこの図のように,回転行列と並進ベクトルを用いて,ワールド座標系をカメラ中心を原点とするカメラ座標系に剛体変換を行う.そして,実際のデジタル画像サイズの「正規化された画像平面(normalized image plane)」上の点$\bm{Xn}から,シーン点$\bm{X}$が透視投影されたという関係性を作れるので,2D画像と3Dシーンの行き来ができるようになる.

3.1節では,ワールド座標系を,カメラ中心を原点としたカメラ中心座標系に変換する「外部パラメータによる座標系変換」について述べる.

図2のように,カメラ座標系(Camera Coordinate)から観測している任意の3Dシーンは,毎回異なる任意の位置がワールド座標系(World Coordinate)の原点となっている.シーン上の3D点から画像上の2D点への透視投影変換が実行できるのはカメラ座標系である.カメラ座標系は,図2の通りカメラ中心$C$が原点で,画像平面$(X,Y)$がカメラフレームと平行であり,$Z$方向がレンズの主軸方向である系である.従って,まずはワールド座標系上の点$\bm{X}=(X,Y,Z)$を,カメラ中心座標系上の点$\bm{X_c} = (X_c,Y_c,Z_c)$に変換したい.

そのワールド座標系からカメラ座標系への,(非同次座標における)線形変換式は,以下の式のように書ける:

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

ここで$\bm{R} = \bm{R}^{\mathrm{T}}_c$,および$\bm{t}=- \bm{R}\bm{X}$は,ワールド座標系の点$\bm{X}$をカメラ中心座標系の点$\bm{X_c}$に剛体変換するための,回転行列と並進(平行移動)ベクトルをそれぞれ示す.

しかし,このカメラモデルの剛体変換部分も,同次座標で表現しておくほうが,このあと計算が楽になる.非同次座標の式である(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]$$

関連記事: 同次座標系 (Homogeneous Coordinates)

3.2 透視投影 (内部パラメータその1)

3.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).

3.3 画像平面上での量子化 (内部パラメータその2)

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

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

以上のパラメータを元に,3.1と3.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]
$$

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

以上の3.1~3.3節の3つの変換を,同次座標系の行列による変換として順に適用する様子を,シーン上の3D点$\bm{X}$から画像平面上の2D点$\bm{x}$へ変換する合成変換として,以下の式で一括に表すことができる:

$$ \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} $$と3つの変換を1つの行列にまとめると,以下のシンプルな形に書き直すことができる.

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

この行列$P$をカメラ行列(camera matrix)と呼ぶ.カメラ行列は,以下のように内部パラメータ(Intrinsic Parameters) 行列 $K $と,外部パラメータ(extrinsic paramters)行列$[ \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 & s & x_0 \\ 0 & \alpha_y & y_0 \\ 0 & 0 & 1 \\
\end{array}
\right]\left[
\begin{array}{cccc}
r_{11} & r_{12} & r_{13} & t_x \\r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z
\end{array}
\right] \left[
\begin{array}{c}
X_c \\ Y_c\\ Z_c \\ 1
\end{array}
\right]
$$

OpenCVのドキュメントのCamera Calibration and 3D reconstructionにも,この透視投影カメラモデルの展開形(各パラメータが全てわかる形) が同じように表記 +解説されているので参考となると思う.(ただし,OpenCVでは内部パラメータ行列$K$のことをcamera matrixと呼ぶので,混乱しないように注意)

4 レンズの放射状歪みモデル

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

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

$$ \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}}$である.

5 まとめ

デジタル画像に用いられるカメラモデルは,透視投影カメラモデル (3節) と 放射状歪みモデル(4節) の2つから構成される.実用上は,透視投影カメラモデルは,同次座標系において外部パラメータ内部パラメータの2行列の積として扱われ,それが3つの変換(剛体変換/透視投影/量子化)の合成として計算することを,3節で紹介した.また,画像のレンズ歪みの放射状歪みモデルについて,4節で説明した.

References

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

外部参照リンク

関連記事