1.バンドル調整 ~ モデル化,及び問題設定
2年前に「最適化計算5 バンドル調整 理論編1」としてエントリを書いていたのですが,今回はこの記事をリライトしています.
バンドル調整とは
三次元シーンを複数のカメラ・視点で撮影した時,全体的に「一番つじつまが合っている.」構成を求めるための手法です.ここで,「つじつまが合う」というのが何なのかを定義してやる必要があります.三次元復元の場合,「再投影誤差を小さくする.」ということがそれに該当します.(うーん.二年前に書いた表現ですが,なんだかうまく書き直せないのでそのままにします.)
バンドル調整のイメージ
3次元点と当該点が各カメラのスクリーンに映った様子を図示します.
それぞれのカメラに関して,3次元座標とスクリーン投影座標には下記の透視投影の関係が成立します.簡単のために,レンズの歪は考えていません.
ただ,ここで成立している関係はそれぞれのカメラ座標系に関してのものです.実際にバンドル調整をするときには基準座標を決めてあげないといけません.今回は簡単のためにカメラ1を基準座標として設定します.基準座標を合わせるために,それぞれの座標系であらわされている点 a の三次元座標を基準座標系(=カメラ1)で表します.それぞれのカメラの位置がわかっていれば,カメラ間の相対位置関係から次のように変換できます.ここでは,カメラ間の相対位置関係が次のようにわかっているとします.
次に,カメラ間の相対位置関係を用いて点 a の座標変換をします.この変換で,「カメラ k から見た点 a の座標」を「基準座標での点 a の座標」を用いて表せるようになります.
各カメラで成立する透視投影の関係に,上スライドの点 a の座標変換式を代入すると,結果的に下記のようにまとまります.
上スライドの最後の式を用いれば,「カメラの3次元位置」,「カメラの内部パラメータ」,「被写体(点 a)の3次元位置」のすべてがわかっていれば,「被写体が写真のどこに写るか」がわかることになります.この式をもう少し書き出すと,,,
これで,スクリーン投影点の "モデル” ができたことになります.一方で,被写体が画像のどこに写っているかは実測できるので,ここまでの導出で被写体の画像座標に関して「実測値」と「予測値(モデル値)」がわかることになります.ここで,モデルが正確だと仮定すると,点 a の位置,各カメラの内部/外部パラメータが完全にあっていれば実測値と予測値は一致します.逆にずれが大きいと,どこかに誤差があることになります.パラメータの誤差は間接的(実測値と予測値の乖離が大きいか否か)にしかわかりませんが,次に,この「誤差の程度」を定義するために評価関数を定義します.
最小化したい評価関数・誤差関数
ここで「誤差の程度」を定義するために,下記の評価関数を使います.式の定義を見て頂ければわかるように,「実測値」と「予測値(モデル値)」が完全に一致すれば評価関数の値は0になります.つまり,評価関数の値が小さくなるほど,モデルに使用されている値が正確であるということになります.
ここまでの式導出の流れだと,
1.パラメータ(「カメラの3次元位置」,「カメラの内部パラメータ」,「被写体(点 a)の3次元位置」)がわかる.
2.モデルに値を代入して,予測値を計算する.
3.予測値と実測値を評価関数に代入して,どの程度の誤差になるか求める.
4.誤差が大きいので,手修正で(笑)ちょっとパラメータをいじってみる.そして2にもどる(笑)
だと思うのですが,バンドル調整では誤差関数の最適化をすることによって「手修正によらず(笑)」最適パラメータを求めます.うーん.いつものことながら,うまいことできているなあと感心します.
今回の問題設定のイメージ
今回の問題設定のイメージは,下記になります.
3次元空間では下記の様な設定になってまして,それぞれのカメラで撮影した円環の画像も載せています.
問題の前提
問題があまり複雑になるといけない一方で,実際に使用する仮定と大きくずれると良くないので,下記の前提でバンドル調整を実施しました.
下記の3点を既知とする.
1.画像に写っている点の画像座標.
2.3台のカメラの位置・角度.(バンドル調整を実施する前に,この値に誤差を載せます.)
3.円弧状の点の3次元位置.(バンドル調整を実施する前に,この値に誤差を載せます.)
カメラの内部パラメータは2種類あり,カメラ1とカメラ2が同じものを共有.カメラ3のみ異なる内部パラメータを保持.
ということで次のエントリに続きます...
目次のページ
バンドル調整はシリーズ物として書いてまして,目次は下記のページになります.
daily-tech.hatenablog.com