MLエンジニアへの道 #59 - カメラモデル

Last Edited: 5/29/2025

このブログ記事では、コンピュータビジョンにおけるカメラモデルや同次座標について紹介します。

ML

これまで、画像における物体の分類、検出、セグメンテーション、および生成について議論してきました。 しかし、カメラがどのように動作し、数学的にモデル化できるかについてはまだ扱っていません。 2Dコンピュータビジョン(画像上での)の基礎を学び、3Dコンピュータビジョンに移行する今、 コンピュータビジョンの基本概念であるカメラモデルと同次座標について議論します。

フィルムとセンサー

基本的に、視覚的知覚とは光を検出し、それに基づいて画像を形成する能力です。 物体を見るとき、私たちは物体とその周囲から反射してくる様々な強度と波長の光を感知し、解釈しています。 したがって、ある時点で装置に到達する可視光(ラテン語でphoto)を何らかの方法で捉えることができれば、シーンの視覚的情報を画像として記録または描画(photograph)することができます。 白黒フィルムは、プラスチックベース上のハロゲン化銀結晶を使用して可視光の強度を捉えることでこれを実現しました。 これらの結晶は光に露出すると暗くなります。シャッターで短時間フィルムを光に晒すことで、シーンの潜像(ネガ画像)を作成でき、 これを化学的に現像して最終的な画像を得ることができます。

研究が進むにつれて、カラーフィルムが発明されました。各層は赤、青、緑に対応するスペクトラムの光にのみ反応します。 さらに、露出する光の強度によって抵抗値が変化する光依存抵抗器(LDR)やその他の光センサーが発明され、 デジタルカメラの誕生につながりました。デジタルカメラは主にベイヤーフィルター(RGGB)というカラーフィルターを使用します。 これは赤、青、および2つの緑フィルター(人間の目は緑により敏感なため緑を2つ)をモザイクパターンで配置し、 デモザイク処理を行ってカラー画像を生成します。

ピンホールカメラモデル

フィルムとセンサーはカメラの最も重要な構成要素ですが、単純に光に露出させるだけでは物体を鮮明に捉えることはできません。 なぜなら、物体上の任意の点から放射されるすべての光が、短時間であってもフィルム(またはセンサー)上のすべての点に到達し、 明るくぼやけた画像を作成してしまうからです。したがって、物体とカメラの間に開口部(ピンホール)を持つ遮蔽物を設置することで、 ある点から放射されてフィルムに到達する光線を1本または数本に制限し、鮮明な画像を得ることができます。 この単純なカメラモデルはピンホールカメラモデルと呼ばれ、以下に図示されています。

Pinhole Camera Model

フィルムまたはセンサーは像(網膜)平面と呼ばれ、カメラの中心にある開口部はピンホールOOと呼ばれ、像平面とピンホールの間の距離は焦点距離ffです。 ここで、カメラ座標系[i,j,k][i, j, k]を定義します。kkは像平面に垂直で、像平面に向かって指しています。 カメラは3D物体の点P=[x,y,z]TP = [x, y, z]^Tを2D像平面Π\Pi'上の点P=[x,y]TP' = [x', y']^Tにマッピングまたは投影します。 相似の法則を使用すると、ピンホールカメラはPPΠ\Pi'P=[x,y]T=[fxz,fyz]TP' = [x', y']^T = [f\frac{x}{z}, f\frac{y}{z}]^Tとして投影することがわかります。

近軸屈折モデル

ピンホールカメラは十分に小さなピンホールでシーンを鮮明に捉えることができますが、小さなピンホールは光を制限しすぎて暗い画像になってしまいます。 したがって、単純なピンホール(鮮明さと強度のトレードオフがある)を使用する代わりに、レンズを使用してPPからのすべての光をPP'に一意にマッピングし、 強度を維持しながら鮮明さを実現できます。以下の図は薄レンズを使用するカメラモデルを示しており、これは近軸屈折モデルと呼ばれます。 このモデルでは、平行光線が屈折して特定の焦点に到達し、レンズの中心と焦点の間の距離を焦点距離ffと呼びます。

Paraxial Refraction Model

焦点から像平面までの距離はz0z_0であり、レンズの中心と像平面の間の距離をz=f+z0z'=f+z_0として定義できます。 ピンホールカメラモデルと同様に、近軸屈折モデルはPPPP'P=[x,y]T=[zxz,zyz]TP' = [x', y']^T = [z'\frac{x}{z}, z'\frac{y}{z}]^Tとしてマッピングします。 デジタルカメラでは、画像の座標系は通常カメラ座標系と異なるため、[cx,cy]T[c_x, c_y]^Tによる平行移動が必要です。 また、幅と高さの物理的測定値(cm)をそれぞれkkll(通常ピクセルcm\frac{\text{ピクセル}}{\text{cm}})を使用して変換する必要があります。 したがって、デジタルカメラによるPPからΠ\Pi'への投影はP=[x,y]T=[αxz+cx,βyz+cy]TP' = [x', y']^T = [\alpha\frac{x}{z} + c_x, \beta\frac{y}{z} + c_y]^Tとして表現でき、 ここでα=fk\alpha=fkβ=fl\beta=flです。

同次座標

ここからは、投影を扱い、回転、平行移動、スケーリング、反射、せん断などの様々な操作を適用していきます。しかし、これらの操作の中で平行移動だけが、 標準座標系において行列の乗算による線形変換ではなくベクトルの加算を必要とします。これにより、変換を行列の乗算の連鎖として表現することができなくなり、 計算や操作がより困難で遅くなってしまいます。

そのため、標準座標系の代わりに同次座標を使用します。これは標準座標系に追加の次元を加えるもので、[x,y]T[x, y]^T[x,y,1]T[x, y, 1]^Tに、[x,y,z]T[x, y, z]^T[x,y,z,1]T[x, y, z, 1]^Tにします。 同次座標系の点[x,y,w]T[x, y, w]^Tは、標準座標系では[xw,yw]T[\frac{x}{w}, \frac{y}{w}]^Tに変換できます。この追加次元により、ベクトルの平行移動を行列の乗算で表現できるようになります。 したがって、デジタルカメラの投影は同次座標で以下のように表現できます。

P=[αx+cxzβy+cyzz]=[α0cx00βcy00010][xyz1]=MP=K[I   0]P P' = \begin{bmatrix} \alpha x + c_x z \\ \beta y + c_y z \\ z \end{bmatrix} = \begin{bmatrix} \alpha & 0 & c_x & 0 \\ 0 & \beta & c_y & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = MP = K[I~~~\vec{0}]P

上のように、[cx,cy][c_x, c_y]による平行移動を行列の乗算に含めることができるため、表現がより簡潔になります。同次座標でPPPP'に変換するために使用される行列はMMであり、 KKMMを分解して得られる3x3行列で、重要なカメラパラメータを含んでおり、カメラ行列と呼ばれます。同次座標を導入するもう一つの利点は、標準座標系とは異なり、 追加次元w=0w = 0を設定することで、方向を保持しながら無限の距離と面積を持つ無限遠の点、線、平面を表現できることです。 これは今は無意味で無関係に思えるかもしれませんが、将来的には重要になります。

カメラ行列モデル

上述のように、カメラ行列には焦点距離(α\alphaβ\beta)とカメラ座標系と画像座標系間のオフセット(cxc_xcyc_y)のパラメータが含まれています。 これらのパラメータはカメラ自体に依存するため、内部パラメータと呼ばれます。これらに加えて、スキューと歪みという2つの追加パラメータがあります。 ほとんどのカメラはスキューがゼロですが、製造誤差によりカメラ座標系がわずかにスキューする可能性があります。以下は、スキューを含むカメラ行列です。

K=[ααcot(θ)cx0βsin(θ)cy001] K = \begin{bmatrix} \alpha & -\alpha \cot(\theta) & c_x \\ 0 & \frac{\beta}{\sin(\theta)} & c_y \\ 0 & 0 & 1 \end{bmatrix}

ここで、θ\thetaはカメラ座標系におけるiijjの間の角度です(導出はこの記事の範囲外です)。歪み効果は無視することが多いため、上の5つの内部パラメータを持つカメラ行列を主に使用します。 カメラ行列はカメラによる3Dオブジェクトから2D画像平面への投影を完全に捉えているように見えるかもしれませんが、これはPPがカメラ座標系に対して表現されている場合のみであり、多くの場合そうではありません。 PPは任意の世界参照系を使用して表現されることが多く、これをカメラ座標系に合わせるために追加の回転と平行移動が必要です。

P=MP=K[R   T]P P' = MP = K[R~~~T]P

ここで、RRは回転行列(x、y、z軸周りの回転に対応する回転行列間の乗算の結果)、TTは平行移動ベクトルです。 回転行列は3つのパラメータ(3軸の回転角)を含み、平行移動も3つのパラメータ(3軸用)を持つため、6つの外部パラメータとなり、これらはカメラ(カメラがどのように製造されるか)に依存しません。 したがって、完全な投影行列MMは11の自由度を持ち、5つの内部パラメータと6つの外部パラメータから構成されます。

カメラキャリブレーション

多くの場合、内部および外部カメラパラメータは未知であり、PP'からPPに関する情報を推定することが困難です。 しかし、カメラと十分なPPが利用可能な場合、これらのパラメータは画像から推定でき、このようなカメラパラメータを推定する問題はカメラキャリブレーションと呼ばれます。 世界参照系の様々な点とそれらに対応する画像上の点を収集することで、MMの各エントリmmを解くための連立方程式に到達し、これを使用してカメラパラメータを推定できます。

避けられない測定誤差とm=0m = 0が常に自明解であることから、m2=1||m||^2 =1という制約を設けて、特異値分解(SVD)を使用してPm2||Pm||^2の最小化を解きます。 このキャリブレーションは一般的にうまく機能しますが、すべての点PPが同一平面上にある場合など、推定が不可能な退化構成があります。 単一画像を使用したカメラキャリブレーションの別の方法もあり、これについては次の記事で取り上げます。

結論

この記事では、フィルムとセンサーが表面的にどのように機能するか、カメラをどのようにモデル化できるか、それらを同次座標で簡潔に表現する方法、 そしてカメラキャリブレーション問題への簡単な導入について議論しました。コンピュータビジョンに関連しないように見えるかもしれませんが、 カメラモデルを理解することで、画像や複数の画像で捉えられたPPや3Dオブジェクトに関する情報を推定し、 3Dコンピュータビジョンへのアプローチを理解できるようになります。次の記事では、同次座標の性質とカメラモデルでの応用についてより深く掘り下げます。

リソース