カメラの位置・姿勢推定0 同次座標・斉次座標の導入

前回のエントリ「カメラの位置・姿勢推定0 透視投影モデルと座標系の定義」で若干フライングしてしまいましたが,このエントリで斉次座標(Homogeneous Coordinate)を導入します.前回のエントリから,カメラ座標系から見た三次元の点(X, Y, Z)を正規化画像座標系に投影すると下記のように表されることがわかりました.

f:id:rkoichi2001:20180123053950j:plain

上式を見ればわかるように,3Dから2Dに変換する計算をするときに簡単な行列の連鎖式で表現できません.任意の世界座標(Xw, Yw, Zw)の投影点をもとめる式も計算しましたが,計算式が複雑になってくるとこれは面倒極まりないので,投影点を3Dの座標とみなします.3Dの座標とみなした場合,正規化画像座標系ではスクリーンは Z = 1 の場所にあるので,投影点は (x, y, 1) と表現されます.これを表現すると

f:id:rkoichi2001:20180123054856j:plain

となります.

斉次座標系の導入

本当は2Dの投影点を(x, y, 1)と表現しましたが,これを斉次座標系表現といいます.どのテキストにも,「計算に便利だから斉次座標系を導入する.」って書かれているんですが,これだとなんだか無味乾燥なので,(x, y, 1)と書かれたら,「原点から距離1の位置に置かれたスクリーンに投影されている点の座標」位に考えればいいのではないでしょうか.
(ここからちょっと自分なり解釈が入ります.間違っているかも.)
で,この斉次座標の特徴なんですが,下記の図を見ていただいてもわかるように,距離1のスクリーンに投影される3Dの点は無限にあるんですよね.要は赤の直線上に乗っている点なら,すべて同じ点に投影されるので.

f:id:rkoichi2001:20180123060523j:plain

なので,斉次座標系では3つの要素が実数倍されたものも等しいとみなします.つまり(1, 2, 3)と(2, 4, 6)と(2000, 4000, 6000)は同じものとして扱います.このように扱うことで,「3D空間では異なる場所にあるが,スクリーンに投影すると同じ場所に投影されるもの」を同じものとしてみなすことができます.これを数式的で表現すると...

f:id:rkoichi2001:20180123062121j:plain

ノートの最後に少し記述してありますが,例えばスクリーンの投影点 x を考えたときに,同じ点に投影される点の集合 λx は同値(equivalent)であるといいます.またこの λ を変えていくと λx はノートに書いている直線になりますが,これを同値類(equivalent class)といいます.

斉次座標系の3D空間への導入

2Dで導入した斉次座標を3Dにも投入します.射影幾何学的にはちゃんとした理由があるんだと思いますが,3Dの説明はいまいち思いつきません.ただ,同じノリで数式を展開するのみ!です.同じように,本来3つの要素で表現できる3D空間上を表現するために4つの要素を使います.

f:id:rkoichi2001:20180123063107j:plain

ただ,わかりやすいメリットとして,3次元空間上の点を斉次座標で表現することによって,回転移動・並進移動を行列計算で表現することがてきます.
f:id:rkoichi2001:20180123065319j:plain

剛体変換,特殊ユークリッド変換(SE(3))

ちなみに,この行列で表される移動は剛体変換 (Rigid Body Motion)といいます.なぜかというと,この行列で点群を移動させても異なる二つの点の距離が変わらないからです.別名特殊ユークリッド変換 (Special Euclidean Transformation) SE(3)とも呼ばれ,次のように定義されます.

SE(3) ≡ {g=(R, T) | R ∈ SO(3), T∈ℝ3}

このSE(3)ですが,論文を読んでるとちょこちょこ出てきて,何のことかいな.と思っていたんですが,剛体変換の群のことだったんですね!

斉次座標系を用いた3D空間上の点とスクリーン上の投影点の関係

斉次座標を2D, 3Dの点に導入したので,この結果を使って3D空間上の点とスクリーン上の投影点の関係式を表現します.まず,2D, 3Dの点それぞれの斉次座標表現は下記のようになります.

2D, 3Dの斉次座標表現

f:id:rkoichi2001:20180125053239j:plain

上記ノートの定義を用いると,カメラ座標系における点と正規化画像座標系の関係は下記のように表現できます.

カメラ座標系における投影点の表現

f:id:rkoichi2001:20180125054208j:plain

カメラ座標系から見たワールド座標系の回転要素・並進要素をそれぞれ R, t と置くと,「剛体変換」のところでまとめたように下記のように表現できます.

ワールド座標系からカメラ座標系への変換表現

f:id:rkoichi2001:20180125060049j:plain

正規画像座標から画像座標への変換は内部パラメータ行列を用いて下記のように表現できます.

正規画像座標系から画像座標系への変換表現と透視投影行列の導入

f:id:rkoichi2001:20180125060756j:plain

「カメラ座標系における投影点の表現」「ワールド座標系からカメラ座標系への変換表現」「正規画像座標系から画像座標系への変換表現」の三つの式を利用して世界座標で表現された点の画像座標への投影点の位置は下記のようにあらわされます.
f:id:rkoichi2001:20180125062058j:plain

ノートの最後で透視投影行列Pを導入しましたが,この3x4行列がわかれば,画像上のどこに点が投影されるかわかることになります.