写真から3次元形状作成の計算方法
以下に記述するようにインターネットで検索した情報を元に計算しています。
T.カメラ位置・姿勢の計算(標準:一定倍率)の場合
0.
前知識
撮影したカメラの位置・姿勢が分かっていれば、対応点の複数の写真上の座標から三角法を用いて3次元の座標は求まります。写真3Dソフトは撮影時のカメラの位置・姿勢は分かっていません。そのため、撮影したカメラの位置・姿勢を求めることが写真3Dソフトの肝となるところです。カメラ位置・姿勢の計算(標準:一定倍率)では中心投影を考えの拠り所にしています。
1.
写真2枚からのカメラの位置・姿勢を算出
2枚の写真で共通な対応点の写真上の座標を用いて撮影時のカメラの位置・姿勢を求めます。これにはエピポーラ幾何を用います。このとき座標系はどちらかのカメラの位置を座標原点とし、そのカメラの正面(つまり写真で「奥」の方向)をZ軸方向、そのカメラで撮影した写真の右をX軸方向、下をY軸方向とします。
3枚の写真から2枚の写真を選ぶ組み合わせは3通り、4枚の写真からは6通り、5枚からは10通りあります。n通りの写真のペアにはエピポーラ幾何で対応点の3次元座標を計算できるものと、共通点の数が足りない等でエピポーラ幾何では3次元形状を作成できないものもあります。
2.
エピポーラ幾何が可能な場合
エピポーラ幾何を用いて対応点の3次元座標を計算できたものは、各々異なる座標系の座標値で表現されています。そのため特異値分解を使って、各写真のペア間で求まった対応点の3次元座標を一致するように座標変換します。このとき、2つのペアに共通の対応点が3つ以上あれば可能ですが、誤差の影響があるためなるべく多くの共通点があった方が良いです。
3.
エピポーラ幾何が不可能な場合
1.と2.でいくつかのカメラの位置・姿勢が求まり、対応点の3次元座標もいくつかは求まっています。そのため相手をどの写真にしてもエピポーラ幾何でカメラ位置・姿勢を算出できなかった写真は、バンドル調整法を用いてカメラの位置を求めます。
4.
精度向上
上記の方法で求めた結果には誤差が入っているため、ニュートン法を用いてカメラの位置・姿勢の精度向上をします。
U.カメラ位置・姿勢の計算(望遠:不揃倍率)の場合
0.
前知識
撮影したカメラの位置・姿勢が分かっていれば、対応点の複数の写真上の座標から三角法を用いて3次元の座標は求まります。写真3Dソフトは撮影時のカメラの位置・姿勢は分かっていません。そのため、撮影したカメラの位置・姿勢を求めることが写真3Dソフトの肝となるところです。カメラ位置・姿勢の計算(望遠:不揃倍率)では平行投影を考えの拠り所にしています。
1.
写真3枚からカメラ位置・姿勢を算出
写真3枚(以上)全てに撮影されている対応点数個(誤差も考慮して10個以上としている)から撮影時のカメラの位置・姿勢を求めます。この対応点全ての重心を全ての写真で中心に撮影されているように座標系をとります。カメラの姿勢を示す行列は2m行3列、3次元座標を示す行列は3行n列です。mは写真の枚数、nは対応点の個数です。この条件を満たすように特異値分解を使用し、写真上の対応点の座標を2m行3列の行列と3行n列の行列の積の形にします。さらにカメラの行列は「X方向とY方向は直交し倍率は等しい」の性質を満足するように補正します。そうすることでカメラの姿勢を示す行列と対応点の3次元座標を示す行列を求めます。
2.
他のカメラ位置・姿勢の算出
1.で使用する対応点が10個に満たない写真を撮影したカメラの位置・姿勢は、バンドル調整法を用いて求めます。
3.
精度向上
上記の方法で求めた結果は1.の写真3枚から求めたカメラ位置・姿勢を元に、3次元形状を求め、それをベースに他のカメラの位置を求めているため、他のカメラで撮影した写真は1.の対応点に影響を与えておらず、最小の誤差になっていないため、ニュートン法を用いてカメラの位置・姿勢の精度向上をします。
制御点の多い曲面の計算方法
表紙に載せている200×200の制御点数の曲面の計算は、最小二乗法で対応点に近似しつつ薄板のバネエネルギーが最小になるようにしています。それの計算をそのまま行うには200×200=40000元の連立1次方程式を解くことになります。この連立方程式を通常の方法で解こうとすると40000×40000の行列が必要となり12.8GBのメモリを要するため不可能です。そのため工夫はしていますが、その工夫の名前が不明なためインターネットで検索できません。あしからず。