カメラと幾何 — 3D世界が2D画像になる数理

カメラは「3次元の世界を2次元の平面に写す装置」です。この写像は驚くほど単純な幾何で記述でき、最終的には x ≃ K[R|t]X というひとつの式にまとまります。ピンホールから消失点、そして行列表現まで、投影のしくみを順に組み立てます。

1. すべての原点 — ピンホールカメラ

レンズを持たない最古のカメラがピンホールカメラです。箱に開けた針穴(ピンホール)を通る光だけが像面(フィルム/センサ)に届きます。シーン上の各点から出た光のうち、穴を通る1本の光線だけが選ばれるため、像面には幾何学的に整った倒立像が結ばれます。

穴から像面までの距離が焦点距離 f です。下のデモで f を動かすと、像の大きさと画角(写る範囲の角度)が連動して変わることを確かめてください。

ピンホールカメラ断面図 — 光線が倒立像を結ぶ
各点から出た光は針穴を直進して像面に届くため、上下(と左右)が反転した倒立像になります。f を大きくすると像は拡大されますが、視野の角度(水色の扇形)が狭まり、木の頭がセンサからはみ出します — 望遠レンズで画角が狭くなるのと同じ原理です。

相似三角形に注目すると、高さ Y・距離 Z にある点の像の高さ y′ はすぐに求まります。

y′ = f · Y / Z 像の大きさは焦点距離 f に比例し、距離 Z に反比例する — 「遠いものは小さく写る」の正体
画角 θ = 2 · atan( w / 2f ) w はセンサの幅。f を伸ばすと θ が狭まる(望遠)、縮めると広がる(広角)
POINT — 焦点距離は「ズーム」の数理 スマホの広角 24mm・望遠 120mm という表記は焦点距離のこと。f を変える=像の拡大率と画角を同時に変える操作であり、像面上ではすべての像が f に比例して一様に拡大縮小される。

2. 透視投影が生む遠近感 — 消失点と地平線

y′ = fY/Z の「Z で割る」という操作を透視投影と呼びます。この割り算こそが、私たちの知る遠近感のすべてを生み出します。

透視投影の性質 — 等間隔の街灯と消失点
街灯は現実には9m間隔で等間隔・同じ高さですが、像の上では奥ほど小さく密になります。ピッチ角を変えると地平線ごと上下します。一方カメラの高さを変えても地平線は動きません(無限遠は高さの影響を受けない)— 動くのは手前の路面の見え方だけです。
POINT — 消失点はカメラ姿勢のセンサ 奥行き方向(Z軸)と平行な直線の消失点は、カメラから見た Z 軸の方向だけで決まる。つまり画像から消失点・地平線を検出できれば、カメラの傾き(姿勢)を逆算できる。自動運転や建築写真の補正で実際に使われるテクニック。

3. 式でまとめる — x ≃ K[R|t]X

ここまでの話を行列でまとめます。世界座標系の3D点 X が画像上の点 x に写るまでは、2段階の変換です。

  1. 外部パラメータ [R|t] — 世界座標をカメラ座標へ。回転 R(3×3)と並進 t(3×1)で「カメラがどこにあり、どちらを向いているか」を表す。
  2. 内部パラメータ K — カメラ座標の3D点を画素座標へ。焦点距離 f(画素単位)と主点 (cx, cy)(光軸が像面を貫く位置、ほぼ画像中心)からなる3×3行列。
s · x = K [R | t] X X=世界座標の3D点(同次座標4×1)、x=画素座標(同次座標3×1)、s=奥行きに相当するスケール。K[R|t] をまとめた3×4行列を「カメラ行列」と呼ぶ

下の操作盤で、内部パラメータ(f)と外部パラメータ(回転3軸・並進3軸)を別々に動かしてみてください。どのスライダーが行列のどの成分を動かすかが右側にリアルタイム表示されます。

内部・外部パラメータ操作盤 — 立方体の投影と K[R|t]
f(オレンジ)は K の対角成分だけを変え、像を一様に拡大縮小します。回転(水色)は R を、並進(緑)は t を変えます。tz(奥行き)を小さくすると近づいて大きく写りますが、f のズームとは歪み方が違う — 近づくと遠近感が強調され、ズームでは形が保たれることに注目。
注意 — 「近づく」と「ズームする」は別物 どちらも像は大きくなるが、tz を減らす(近づく)と手前と奥の比率 Z近/Z遠 が変わり遠近感が誇張される。f を伸ばす(ズーム)だけなら比率は不変で、像は相似に拡大される。映画の「めまいショット」はこの2つを同時に逆方向へ動かす技法。

4. キャリブレーション — カメラの中身を測る

K[R|t] の式を実際に使うには、自分のカメラの K(fや主点の値)を知る必要があります。これを実測する作業がカメラキャリブレーション(校正)です。

定番の方法は、寸法が既知のチェッカーボードを様々な角度から撮影するもの。格子点の「本当の3D配置」と「画像上の位置」の対応をたくさん集め、投影の式を最もよく満たす K と各撮影の [R|t] を同時に逆算します。対応点から幾何を推定する — 前レッスンのマッチングと同じ発想がここでも主役です。

一歩先へ — 現実のレンズは歪む 実際のカメラはピンホールではなくレンズなので、ピンホールモデルからのズレ=レンズ歪みが生じる。代表は画像の端で直線が樽型/糸巻き型に曲がる半径方向歪みで、像の中心からの距離 r の多項式 (1 + k1r² + k2r⁴ …) で補正するのが定番。キャリブレーションでは K・[R|t] と一緒にこの歪み係数も推定し、補正後の画像を「理想のピンホール画像」として扱う。

5. まとめ