最適化計算5 バンドル調整 理論編1

長いこと最適化の勉強をやってきましたが,やっとこさバンドル調整まで来ました.ここまでくれば,三次元復元を理解するのに必要な道具はある程度勉強したといえるのではと思います.

バンドル調整とは

三次元シーンを複数のカメラ・視点で撮影した時,全体的に「一番つじつまが合っている.」構成を求めるための手法です.ここで,「つじつまが合う」というのが何なのかを定義してやる必要があります.三次元復元の場合,「再投影誤差を小さくする.」ということがそれに該当します.

問題設定のイメージ

問題設定のイメージですが,下記のようになります.
f:id:rkoichi2001:20180502235639j:plain

で,それぞれのカメラに関して,三次元座標とスクリーンの投影座標には透視投影の関係が成立します.
f:id:rkoichi2001:20180503001832j:plain

ここで,三次元復元をするときには基準座標(世界座標系)を決めてあげないといけません.今回はカメラ0の位置を基準座標として設定します.次に,それぞれの座標系であらわされている三次元座標を世界座標系(=カメラ0)を基準座標として表します.各座標系の関係は下記で表せます.
f:id:rkoichi2001:20180503003405j:plain

各カメラで成立する透視投影の関係に,もう一工夫施して,世界座標で記述します.
f:id:rkoichi2001:20180503011717j:plain

これで,カメラ行列が与えられました.次に,このカメラ行列が与えられたときに,三次元点 p = (Xα, Yα, Zα)T がスクリーンのどこに投影されるかということを考えてみます.
f:id:rkoichi2001:20180503013005j:plain

上式より,「カメラ行列,三次元点 p の世界座標が与えられたとき,該当カメラの画像面のどこに投影されるか」ということがわかりました.

最小化したい評価関数・誤差関数

ここでは評価関数を設定してあげないといけません.いつものごとく,ここでも再投影誤差を使います.
f:id:rkoichi2001:20180503014127j:plain

上記の評価関数で,わかっている変数って3Dの点の各カメラでのスクリーン投影座標 (xαk, yαk) だけなんですよね.なので,「3Dの点の世界座標」「カメラの内部パラメータ(焦点距離,主点)」「カメラ外部パラメータ(位置,回転)」は,この評価関数を最小化するうえで更新されていきます.

更新対象となる変数

最小化対象となる評価関数ははっきりしましたが,実際に更新対象となる未知数をリストアップしてみます.
1.三次元点の世界座標系での位置 ΔXα = (ΔXα, ΔYα, ΔZα)T -> 三次元点の個数 : N x 3
2.カメラの焦点距離 Δfk -> カメラ(視点)の個数 : M
3.カメラの主点 (Δuk, Δvk) -> カメラ(視点)の個数 : M x 2
4.カメラの世界座標系での位置 Δtk = (Δtxk, Δtyk, Δtzk)T -> カメラ(視点)の個数 : M x 3
5.カメラの世界座標系での回転 Δωk = (Δωxk, Δωyk, Δωzk)T -> カメラ(視点)の個数 : M x 3

すべてを足しこむと,未知数の数は 3N + 9M となります.ただし,どこかの視点を基準にしてあげないといけません.(今回の場合はカメラ0を基準にしようとしてます.)そうすると,カメラ一つ分の位置・回転に関する未知数(合計6個)が減ります.また,画像を用いた三次元復元ではスケールが不定なので,カメラ0とどこかのカメラの距離を1として決め打ちで設定してあげる必要があります.これを鑑みると,最終的に未知数の数は下記のようになります.

3N + 9M - 7

例えば,一つの画像からとれる特徴点を100個として,写真を100枚撮影したとすると,未知数が1193個.おおいですね...長くなってしまったので,アルゴリズムの導出編は次のエントリにします.