3次元復元 — 写真の集合から世界を再建する
バラバラに撮った2D写真の集合から、撮影時のカメラ位置と3D構造を同時に推定する。三角測量と再投影誤差の最小化という2つの原理を軸に、SfM から NeRF・3D Gaussian Splatting まで、3次元復元の全体像を動かしながら掴みます。
1. 視線の交点が3D点になる — 三角測量
ステレオ視で見たとおり、同じ点を2つの視点から観測できれば、各カメラ中心から観測方向へ伸ばした視線(レイ)の交点として3D位置が決まります。これが三角測量です。ただし現実の観測にはノイズが乗るため、視線は厳密には交わりません。そこで「すべての視線に最も近い点」を最小二乗で求めます。
重要なのはカメラの台数と配置です。2台で視線のなす角が浅いと、交点は奥行き方向に大きくブレます。台数を増やして多方向から観測すると、交差が「締まり」、誤差が急激に減ります。下のデモでカメラ台数を変えてみてください。
2. すべてを支配する量 — 再投影誤差
3次元復元のあらゆる工程は、たった1つの量を小さくするゲームとして統一的に理解できます。それが再投影誤差(reprojection error)です。推定した3D点 Xj を、推定したカメラ姿勢 Ci で画像に投影し直したとき、実際に観測された特徴点 xij とのズレ(画素単位)がそれです。
この最小化を、全カメラ・全点について一気に行う非線形最適化がバンドル調整(bundle adjustment)です。名前は「カメラから伸びる光線の束(bundle)をまとめて調整する」ことに由来します。変数は数百万に達しますが、ヤコビ行列が疎(各点は一部のカメラにしか写らない)であることを利用して Levenberg–Marquardt 法で効率的に解けます。
3. SfMパイプライン — 4つの段階
順序のない写真集合からカメラ姿勢と疎な点群を推定する枠組みが SfM(Structure from Motion) です。COLMAP に代表される標準パイプラインは次の4段階からなります。下のデモをステップ実行して、各段階で何が確定していくかを追ってください。
4. SfM・MVS・SLAM — 似て非なる三兄弟
「画像から3D」を扱う技術は目的と制約条件で3つに分かれます。混同しやすいので整理しておきましょう。
| SfM | MVS | SLAM | |
|---|---|---|---|
| 入力 | 順序のない写真集合 | SfM の出力(姿勢既知の画像) | 連続した動画・センサ列 |
| 出力 | カメラ姿勢+疎な点群 | 密な点群・メッシュ | カメラ軌跡+地図(逐次更新) |
| 処理 | オフライン(全画像を一括処理) | オフライン(姿勢を固定して密対応) | リアルタイム(逐次処理) |
| 核となる技術 | 特徴マッチング+バンドル調整 | フォトコンシステンシー・平面スイープ | フィルタ/局所BA+ループ閉じ込み |
| 代表例 | COLMAP | PatchMatch MVS | ORB-SLAM、VIO(AR・ロボット) |
典型的なフォトグラメトリの流れは SfM(疎)→ MVS(密)→ メッシュ化 → テクスチャ貼り という直列パイプラインです。一方 SLAM は自動運転やARのように「動きながら今すぐ自己位置が要る」場面で使われ、精度よりリアルタイム性を優先して局所的なバンドル調整を回し続けます(自動運転の SLAM 参照)。
5. 点群から連続な表現へ — NeRF と 3D Gaussian Splatting
古典パイプラインの出力は点群やメッシュという離散的な表現でした。2020年の NeRF(Neural Radiance Fields) はここを根本から変えます。シーンを「空間座標+視線方向 → 色と密度」を返す連続な関数(ニューラルネット)として表し、ボリュームレンダリングで任意視点の画像を微分可能に合成、撮影画像との再構成誤差だけでこの場を学習します。最適化の目的関数が再投影誤差から「画像そのものの再現誤差」に置き換わった、と見ることもできます。
6. まとめ
- 三角測量:複数視点の視線の交差で3D点が決まる。交差角が浅いと奥行き誤差が爆発する。
- 再投影誤差:3D復元の共通目的関数。バンドル調整はカメラと点を同時に動かしてその総和を最小化する。
- SfM / MVS / SLAM:疎な復元・密な復元・リアルタイム自己位置推定という役割分担。
- NeRF・3DGS:シーンを微分可能な連続表現として持ち、画像再現誤差で直接最適化する新世代。SfM の幾何は今も土台。