1. カメラモデル (Camera Model) と 透視投影 (Perspective Projection)とは [概要]
カメラモデル(Camera Model) と 透視投影 (Perspective Projection) モデル について,コンピュータビジョンの視点から,この記事では説明をおこなう.
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.1- 3.3節: カメラモデルを構成するパラメータを3つの部品に分解して説明.
- 3.1節:外部パラメータ: 「ワールド座標系(3D) 」から 「カメラ中心座標系(3D)」への剛体変換3.2節:内部パラメータ1 「透視投影」3.3節:内部パラメータ2「画像平面上での標本化 」
- 3.4節: 3パラメータを合成した最終モデル (※ [1]のモデル化にならっている).
- 3.1- 3.3節: カメラモデルを構成するパラメータを3つの部品に分解して説明.
- 4節:放射状歪み(radial distortion)に伴う,「画像のレンズ歪み」のモデル化.
カメラモデルの各パラメータは,カメラキャリブレーションやエピポーラ幾何などを通して推定することができ,推定されて以降は,画像からの3次元復元問題を解くためにカメラモデルの幾何を利用できる.
2. 透視投影モデルによるカメラ幾何表現
コンピュータビジョンのカメラモデルには,撮影シーンの3次元点が,2次元の画像平面に透視投影 (perspective projection)されたことを模擬したカメラモデルである「透視投影モデル」を標準的に用いる.
透視投影モデルでは,実際のカメラを簡素に近似したピンホールカメラモデル (pinhole camera model)を元にして,そのモデルの投影面に投影されたシーン実像を,カメラ中心を基準に反転した画像平面が存在すると仮想的にみなす.
この2節では,まずピンホールカメラモデルを紹介したのち,それを元にした透視投影に基づくカメラモデルを3節で紹介する.
2.1 ピンホールカメラモデル (簡易的な実カメラの撮像モデル)
ピンホールカメラモデルは,カメラを単純な四角形の箱とみなし,レンズ無しで光の入ってくる穴(ピンホール,光学中心)が,点である(Apertureが極小である)とみなし,カメラによる撮像過程を簡素な形として抽象化したモデルである(図1).
このモデルでは,ピンホールを通った光が,カメラ箱内の焦点$f$の距離だけ先にある投影面(plane of projection)に結像する様子だけを,シンプルに抽象化している.ピンホールカメラモデルをアレンジする形で,計算機工学のカメラモデルとして広く用いられる「透視投影カメラモデル(2.2節)」が設計されている.
2.2 透視投影によるカメラモデル
前節のピンホールモデルは,投影画像が上下左右反対になって投影されているので,我々人間としては直感的に少しわかりづらい.そこで,実際の計算機におけるカメラ幾何では,ピンホールモデルにおける仮想画像平面を,真の画像平面であるとみなすようにした透視投影カメラモデルが用いられる (図2).
図2の$C$はカメラ中心 (camera center) であり,この点がピンホールカメラモデルのピンホールに相当する.3Dシーン点 $\bm{X}$ からの光が,仮想画像平面上の対応する点へと,そのまま透視投影されたとみなすことから,透視投影カメラモデルと呼ばれている.
透視投影カメラモデルを用いる1番の利点は,透視投影に基づいたカメラ幾何モデルが使用でき,なおかつ「カメラ中心$C$を基準とした3D点と2D点の単純な関係性」が作れる点にある.絵画や漫画・イラストにおいては,Perspectiveを短縮した「パース」とも通称呼ばれる「透視図法(遠近法の一種)」がよく用いられている.図2はパースのような,透視投影に相当するカメラモデルであるので,「透視投影」カメラモデルと呼ばれる.
3. 「内部パラメータ」と「外部パラメータ」
図2の透視投影カメラモデルにおいては,光線$XC$が画像平面と交わる点が,画像平面上の投影点$\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) 」から 「カメラ中心座標系(3D)」への剛体変換
3.1節では,ワールド座標系を,カメラ中心を原点としたカメラ中心座標系に変換する「外部パラメータによる座標系変換」について述べる(図3).
図3のように,カメラ座標系(Camera Coordinate)上から観測している任意の3Dシーンは,毎回異なる任意の座標が,ワールド座標系(World Coordinate)の原点となっている.
シーン上の3D点から画像上の2D点への透視投影変換が実行できるのは,この3Dカメラ座標系である.
3.1.1 カメラ座標へ変換する動機
カメラ座標$(X_c,Y_c,Z_c)$を用いると,3D->2Dの透視投影が可能になるので,ワールド座標系よりカメラ中心座標系に持ち込みたい.そこで回転行列と並進ベクトルを用いて,ワールド座標系をカメラ中心を原点とするカメラ座標系に剛体変換を行う.
理想的には,正規化された画像平面(normalized image plane)上の点$\bm{x_n}$だと$f=1$であり計算しやすい.しかし$f=1$は理想的でつくりえないので,実際のところは(図1の仮想画像に相当する)画像平面上の2D点$\bm{x}_c$が,実シーン上の3D点$\bm{X}_c$から透視投影されているとみなすのが普通である.
3.1.2 ワールド座標系からカメラ座標系への変換
カメラ座標系は,図3のように,カメラ中心$C$が原点で,画像平面$(\bm{x}_x,\bm{y}_c)$がカメラフレームと平行であり,$Z$方向がレンズの主軸方向である系である.従って,まずはワールド座標系上の点$\bm{X}_w=(X_w,Y_w,Z_w)$を,カメラ中心座標系上の点$\bm{X_c} = (X_c,Y_c,Z_c)$に変換したい.
ワールド座標系からカメラ座標系への,(非同次座標における)線形変換式は,以下の式のように書ける:
$$ \bm{X_c} = \bm{R_c^T}(\bm{X}-\bm{C}) = \bm{R}\bm{X}_w+ \bm{t} \tag{3.1}$$
ここで$\bm{R} = \bm{R}^{\mathrm{T}}_c$,および$\bm{t}=- \bm{R}\bm{X}_w$は,ワールド座標系の点$\bm{X}_w$をカメラ中心座標系の点$\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_w \\ Y_w \\ Z_w \\ 1
\end{array}
\right] \tag{3.2}$$
3.2 内部パラメータその1: 透視投影
3.1節の変換を通して,まずワールド座標形からカメラ座標系に,座標系が変換された.次に3.2節では,透視投影変換を用いた光線の投影について定式化する.
焦点距離$f$ であるカメラによって,シーン中の3D点$(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{3.3}
\]
式(3.3)の,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] \tag{3.4}
$$
ここで$f$ により定義される$3 \times 4$の透視投影行列を,$\bm{P}_p$と表記する
ちなみに $f=1$ の場合の平面$(x_n,y_n)$ を,正規化された画像平面(normalized image plane)もしくは正規化されたカメラ(normalized camera model)と呼ぶ.
3.3 内部パラメータその2: 画像平面上での標本化
現在のデジタルカメラでは,CMOSなどの撮像素子(イメージセンサー)上の2次元画素配列に沿って取得したアナログの画素値が,標本化によってデジタル値化される機構が標準的である.
まず変換に用いる各パラメータについて述べる.画像センサーごとに,縦横単位長や幅と高さの長さは違うので,それを表現するための縦横のスケール比率をそれぞれ $m_x, m_y$ とする.また,画像センサー上のコーナー(左上)を原点とし,レンズの主軸が画像平面と交差する主軸点は座標 $[x_0, y_0]^{\mathrm{T}}$ に位置するものとする.加えて,センサーのxや軸とy軸は完全な直交系としては構成不可能であるゆえ,真上から見た画像平面全体の傾きをスキュー(skew)(平行方向の傾き)パラメータの $s$ で表現する.
以上のパラメータを元に,3.1節と3.2節の2つの変換,式(3.2)と式(3.4)を経て得られる2D投影点$(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] \tag{3.5}
$$
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}\tag{3.6}
\]
この式で,$$\bm{P}_c \bm{P}_p \bm{P}_r = \bm{P} $$のように,3変換を1つの行列へまとめると,以下のシンプルな形に書き直すことができる:
\[
\lambda \bm{x} = \bm{P} \bm{X} \tag{3.7}
\]
この行列$\bm{P}$ をカメラ行列(camera matrix)と呼ぶ.
カメラ行列は,以下のように内部パラメータ(Intrinsic Parameters) 行列 $\bm{K}$ と,外部パラメータ(extrinsic paramters)行列 $[\bm{R}| \bm{t}]$ の2つの行列の積で構成されている:
\[
\bm{P} = \bm{K} [ \bm{R}| \bm{t}] \tag{3.8}
\]
行列 $\bm{K}$ を構成する内部パラメータは,カメラ座標系におけるカメラ内部(パラメータ)の2つの写像(3.2節と3.3節)を合成したものである.従って $\bm{K}$ は,以下の各要素から構成される:
$$\bm{K} = \left[
\begin{array}{ccc}
\alpha_x & s & x_0 \\ 0 & \alpha_y & y_0 \\ 0 & 0 & 1
\end{array}
\right] \tag{3.9}
$$
ここで,$\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] \tag{3.10}
$$
OpenCVでは内部パラメータ行列$\bm{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) \tag{4.1}$$
ここで $[x_{n}, \ y_{n}]^{\mathrm{T}}$ は歪み除去後の,正規化座標での画素位置を指し,$[x_{nd}, \ y_{nd}]^{\mathrm{T}}$ は歪みがある状態での画像位置を指す.また,$k_1, k_2$ は,カメラキャリブレーションを通じて求める放射状歪みモデルのパラメータであり,$r = \sqrt{x^2_n+y^2_n}$ という関係である.
スキューがゼロであると仮定できる場合,上の正規化座標系における関係式だったものが以下のように通常の画素位置でも表現できる:
$$ \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) \tag{4.2} $$
$[x, \ y]^{\mathrm{T}}$ はピンホールカメラモデル(2節)で推定される画素の座標を示し,それを変換したものが,左辺の$[x_{d}, \ y_{d}]^{\mathrm{T}}$ である.
スキュー変換については以下の記事を参照:
5. まとめ
コンピュータビジョンに用いられるデジタル画像撮影むけのカメラモデルは,透視投影カメラモデル (3節) と 放射状歪みモデル(4節) の2つのモデルから構成される.
実用においては,(透視投影)カメラモデルは,同次座標系において 外部パラメータ(3.1節)と内部パラメータ(3.2節 + 3.3節)の,2つのパラメトリックモデルの合成として構成される.つまりは,3つの変換の行列積「剛体変換(3.1節) × 透視投影(3.2節) × 標本化(3.3節)」として,3要素に分解したパラメータ行列の積を,「外部パラメータと内部パラメータの合成変換」として使用する(3.4節).
また,最後に,画像のレンズ歪みの「放射状歪み」をモデル化する部分のパラメータ化(4節)についても説明した.
参考書籍
- ディジタル画像処理 [改訂第二版] (紹介記事)
- Concise Computer Vision: An Introduction into Theory and Algorithms (Undergraduate Topics in Computer Science) , Reinhard Klette, 2014.
References
- [1] N. Pears, L. Yonghuai, and B. Peter, 3D Imaging, Analysis and Applications, Springer, 2012