目次 — 知りたいところから読む
前提と読み方

前提知識 ベクトル・行列とカメラ投影の基礎。

入門 · 原理・構成・判断のための解説です。

Structure from Motionが復元するのは、特徴点だけをつないだ疎な3D点群である。建物の輪郭やテクスチャの角は分かっても、壁面や曲面の形はほとんど点が打たれておらず、そのままでは「形」として使えない。Multi-View Stereo(MVS、多視点ステレオ)は、SfMやカメラキャリブレーションで既に分かっているカメラ姿勢を前提に、画像のほぼすべての画素に対して深度を求め、密な点群やメッシュへ埋め尽くす技術である。姿勢推定はSfMの仕事、密な形状復元はMVSの仕事、という分業がこの2つの技術の関係を理解する出発点になる。

0. 30秒要約

  • MVSは、姿勢が既知の多数の画像から、画素単位で密な深度を推定し、点群やメッシュへ統合する技術である。SfMの疎な点群を密な形状へ埋める後段の処理にあたる。
  • 基本原理は光度一貫性(photo-consistency)である。正しい深度で3D点を仮定すれば、その点を見ている複数画像の対応画素は互いに似た色・輝度を持つはずだ、という仮定を使う。
  • 代表的な古典アプローチは2つある。深度候補を平面として掃引しながら整合性を評価するPlane-Sweep法と、小さなパッチを反復的に拡張・フィルタするPatch-based法(PMVS)である。
  • 近年はコストボリュームを畳み込みで処理する深層学習ベース手法(MVSNetなど)が精度・頑健性で古典手法を上回る場面が増えている。
  • 得られた複数視点の深度マップは、そのまま点群として使うか、TSDF融合やPoisson Surface Reconstructionでメッシュへ変換する。ステレオカメラやデプスカメラのリアルタイム深度推定とは、光度一貫性という原理を共有しつつ、視点数・オフライン性・計算予算の点で立ち位置が異なる。

1. 何を入力し、何を求めるのか

MVSの入力は、SfMまたはカメラキャリブレーションで既に求まっている次の情報である。

  • 各画像 i のカメラ姿勢と内部パラメータ P_i = K_i[R_i\mid\mathbf{t}_i](既知として扱う)
  • 対象シーンを撮影した画像集合 \{I_1,\dots,I_N\}

出力は、各画像(または選ばれた基準画像群)に対する密な深度マップ \{D_i\}、あるいはそれらを統合した密な点群・メッシュである。SfMの出力である疎な点群とカメラ姿勢が「骨格」だとすれば、MVSはそこに「肉付け」をする工程にあたる。姿勢が未知のまま密な形状だけを求めることはできない——MVSは常にSfMやキャリブレーションの後段に位置する技術である、という前後関係を最初に押さえておく。

2. なぜ疎な点群では足りないのか

SfMが密な点群を直接出さない理由は、その入力が特徴点マッチングに依存しているからである。特徴点抽出入門で見た通り、コーナーやエッジなど「際立った」画素しか安定に検出・マッチングできない。壁一面のような一様なテクスチャ領域には特徴点自体が立たず、SfMの3D点群はそこにぽっかり穴が空く。

一方、MVSはすでに姿勢が分かっているという強い制約を使えるため、特徴点である必要がない。任意の画素について「この深度候補は他の画像でも辻褄が合うか」を直接評価できる。これにより、テクスチャの乏しい壁面であっても、ある程度の模様や陰影さえあれば深度を推定できる可能性が生まれる(完全に模様のない面は依然として苦手であることは後述する)。

3. 光度一貫性という基本原理

MVSのほぼ全ての手法が土台にするのが光度一貫性(photo-consistency)の仮定である。基準画像の画素 \mathbf{u} に対応する3D点の深度を d と仮定すると、その3D点は

\mathbf{X}(\mathbf{u}, d) = \pi_{\text{ref}}^{-1}(\mathbf{u}, d)

として復元でき、これを別の画像 k に再投影した画素 \mathbf{u}' = \pi_k(\mathbf{X}(\mathbf{u},d)) が、I_{\text{ref}}(\mathbf{u}) と近い色・輝度を持つはずだ、というのが光度一貫性の仮定である。これはステレオカメラの視差探索——デプスカメラの仕組みやステレオカメラの仕組みで扱った、左右画像の対応画素を輝度の一致で探す処理——を、2視点から N視点へ一般化したものだと考えると理解しやすい。実際、2眼のステレオカメラにおける深度は、焦点距離 f、基線長 B、視差 d_{\text{disp}} を使って

Z = \frac{fB}{d_{\text{disp}}}

という単純な式で求まるが、MVSはこの「視差を探して深度に変換する」操作を、任意の台数・任意の配置のカメラへ拡張したものにあたる。

画素周辺の小さな窓 W を使い、正規化相互相関(NCC)でこの一致度を測るのが典型的な実装である。

\mathrm{NCC}(\mathbf{u}, d) = \frac{\sum_{\mathbf{x}\in W}\left(I_{\text{ref}}(\mathbf{x})-\bar I_{\text{ref}}\right)\left(I_k(\mathbf{x}')-\bar I_k\right)} {\sqrt{\sum_{\mathbf{x}\in W}\left(I_{\text{ref}}(\mathbf{x})-\bar I_{\text{ref}}\right)^2}\sqrt{\sum_{\mathbf{x}\in W}\left(I_k(\mathbf{x}')-\bar I_k\right)^2}}

\mathbf{x}' は、深度候補 d の局所平面を仮定して \mathbf{x} を画像 k へ写した対応点である。\mathrm{NCC} は輝度のスケール・オフセット変化に頑健で、露出や照明差が画像間で多少あっても機能する。すべての画像対、すべての深度候補についてこの一致度を計算し、最もスコアの良い深度を選ぶ、というのがMVSの計算の骨格になる。

4. 基本パイプライン

図1 · ボタンで表示を切り替え
MVSの基本パイプライン 既知のカメラ姿勢と画像集合から、Plane-SweepまたはPatch-basedで各画像の密な深度マップを推定し、複数視点の深度マップを融合して密な点群やメッシュへ統合する流れを示す図。 画像集合+既知カメラ姿勢 Plane-Sweep深度候補を掃引し光度一貫性を評価 Patch-basedパッチを拡張し可視性でフィルタ 各画像の密な深度マップ 深度マップ融合 点群/メッシュ

前段でPlane-SweepかPatch-basedのどちらかを選んで各画像の密な深度マップを求め、後段でそれらを1つの一貫した3D形状へ融合する、という2段構成が古典的MVSの基本形である。近年の深層学習ベース手法もこの2段構成を踏襲しつつ、深度推定の内部をニューラルネットワークで置き換えている。

5. Plane-Sweep法

Plane-Sweep(平面掃引)法は、Collinsが1996年のCVPRで提案した空間走査によるマルチ画像マッチングを起点とする考え方で、基準カメラの視錐台内に、カメラ光軸に垂直な(あるいはシーンに応じた向きの)仮想平面を一定間隔で並べ、深度を浅い方から深い方へ掃引しながら評価する。

ある深度 d の平面を仮定すると、その平面上の点はホモグラフィ変換によって基準画像から他の画像へ写せる。ホモグラフィ変換入門で見た H = K_k(R+\mathbf{t}\mathbf{n}^\mathsf{T}/d)K_{\text{ref}}^{-1} の形の変換を使い、他画像 I_k を基準画像の視点へワープする。ワープした画像と基準画像の各画素で光度一貫性(前節のNCCなど)を計算し、深度候補ごとにコストを積み上げていく。

d^*(\mathbf{u}) = \arg\min_{d\in\mathcal{D}} \sum_{k} \rho\left(1-\mathrm{NCC}_k(\mathbf{u},d)\right)

全深度候補についてコストを計算し終えたら、画素ごとに最小コストの深度を選ぶ。これは離散的な深度探索であり、GPUでの並列化と相性が良く、多数の深度仮説を一度に評価できる。半局所的なコスト集約(Semi-Global Matching的な正則化)を組み合わせて、テクスチャの乏しい領域でも近傍の情報から深度を滑らかに補間する実装も多い。COLMAPの密な再構成モジュールも、Plane-Sweepに近い考え方で画素ごとの視点選択(Pixelwise View Selection)を最適化する手法を採用しており、SchönbergerらのECCV 2016論文がその代表例である。

6. Patch-based法(PMVS)

Patch-based法は、画素単位で深度を掃引するのではなく、シーン表面を覆う小さな矩形パッチの集合を直接生成・拡張していくアプローチである。代表例が、FurukawaとPonceが2010年のIEEE TPAMIで発表したPMVS(Patch-based Multi-View Stereo)である。

処理は「マッチ・拡張・フィルタ」の3段階を繰り返す。

  1. マッチ:まずSIFTやHarrisコーナーなど、特徴点として検出しやすい対応点から少数の初期パッチを生成する。各パッチは中心位置、法線方向、その点を見ている画像集合(可視性)を持つ。
  2. 拡張:初期パッチの近傍に新しいパッチを伝播させ、周辺画素へ覆う範囲を広げていく。伝播先の位置・法線は、周辺画像に対する光度一貫性が最大になるよう局所的に最適化する。
  3. フィルタ:可視性の矛盾(あるパッチの手前に別のパッチがあるのに両方が見えるとされている、など)や、光度一貫性の低いパッチを取り除く。

PMVSは、画素ごとに独立に深度を決めるPlane-Sweepと異なり、パッチの法線という追加情報を持つため、斜めを向いた面の復元精度が高い傾向がある。一方、拡張とフィルタを反復する性質上、初期パッチが少ない、あるいはテクスチャに乏しい領域では拡張が進まず、穴の残る復元になりやすい。

7. 深層学習ベース手法:コストボリュームという発想

近年は、深度候補ごとの一致度を人手で設計した指標(NCCなど)ではなく、畳み込みニューラルネットワークで学習した特徴量とコストボリュームで表現する手法が主流になりつつある。代表例が、Yaoらが2018年のECCVで発表したMVSNetである。

MVSNetは、各画像から学習済みの特徴抽出器で特徴マップを求め、基準カメラの視錐台内に離散的な深度平面を仮定して各画像の特徴マップを微分可能なホモグラフィワープで基準視点へ整列させる。複数画像の特徴マップの分散を使って1つのコストボリュームにまとめ、3次元畳み込みで正則化してから、深度方向のソフトマックスで深度を回帰する。基本的な骨格はPlane-Sweep法の「深度候補を掃引して評価する」という考え方を踏襲しつつ、光度一貫性の計算そのものを学習可能にした点が古典手法との違いである。

学習ベース手法は、繰り返しパターンや弱いテクスチャなど、手作りの光度一貫性指標が苦手とする条件でも、学習データに類似の状況が含まれていれば頑健に振る舞いやすい。反面、学習に使ったデータセットの分布から大きく外れたシーン(未知の素材、極端な照明)では性能が劣化しうる。

8. 深度マップ融合とメッシュ化

複数視点の深度マップは、それぞれ独立に推定されているため、単純に3D点として重ねるとノイズやオクルージョンによる矛盾(同じ場所に僅かにずれた点が何層も重なる、視点間で深度が食い違う)が残る。融合(fusion)は、これらの深度マップを1つの一貫した表現へまとめる処理である。

  • 点群としての融合:視点間で深度の整合性が取れている画素だけを採用し、信頼度の低い深度を捨てて統合する。COLMAPなどはこの方式で密な点群を出力する。
  • TSDF(Truncated Signed Distance Function)融合:CurlessとLevoyが1996年のSIGGRAPHで提案した、空間をボクセルに分割し各ボクセルに符号付き距離を累積するボリューメトリック手法である。デプスカメラのリアルタイム融合(KinectFusionなど)で広く使われ、MVSの深度マップ融合にも応用できる。
  • メッシュ化:点群や符号付き距離場から、KazhdanらによるPoisson Surface Reconstruction(2006年)などの手法で滑らかなポリゴンメッシュを生成する。テクスチャマッピングを行えば、見た目にも使える3Dモデルが完成する。

9. 代表アルゴリズムの比較

観点 Plane-Sweep Patch-based(PMVS) 学習ベース(MVSNet系)
原理 深度平面を掃引し画素ごとに光度一貫性を評価 小さなパッチを反復的に拡張・フィルタ コストボリュームをCNNで正則化し深度を回帰
精度 深度刻みとコスト集約の設計に依存、中〜高 斜面や局所形状の精度が高い傾向 学習データに近い条件では高精度
計算コスト GPU並列化しやすく高速 反復処理でPlane-Sweepより遅くなりやすい 学習後の推論は高速、学習コストは別途必要
頑健性 テクスチャに乏しい領域は苦手 初期パッチが乏しい領域で穴が残りやすい 弱テクスチャや繰り返しパターンに比較的強い
実装難易度 中程度(ホモグラフィワープとコスト集約) 高い(可視性管理と反復拡張の設計) 高い(学習データとネットワーク設計が必要)
代表実装 COLMAP dense、多くの商用フォトグラメトリ PMVS/CMVS MVSNet、後継の学習ベース手法群

10. ステレオカメラ・デプスカメラとの関係

MVSとステレオカメラ、デプスカメラは、「複数視点の対応から深度を求める」という原理を共有しているが、立ち位置は異なる。

  • ステレオカメラは固定された2眼配置で、視差探索の範囲がエピポーラ線上の1次元に限定され、リアルタイム処理を前提に設計されている。MVSのPlane-Sweep法は、この視差探索を任意台数・任意配置のカメラへ一般化したものと理解できる。
  • デプスカメラ(構造化光・ToF・アクティブステレオ)は、能動的に光を投射することで、テクスチャの乏しい面でも安定して距離を取得できる。MVSは受動的(パッシブ)な光度一貫性だけに頼るため、模様の少ない面では原理的に不利であり、この点がアクティブなデプスカメラとの明確な違いになる。
  • MVSは基本的にオフラインで多数枚(数十〜数百枚)の画像から高精度・高密度な形状を作り込むのに対し、ステレオカメラやデプスカメラはリアルタイムで1フレームずつ深度を出し続けることに最適化されている。

用途に応じて、リアルタイム性が要るロボットやARにはステレオ・デプスカメラ、オフラインで高精度な3Dモデルが欲しい文化財記録や建築測量、フォトグラメトリにはMVSが向く、という住み分けになる。

11. 苦手な条件・失敗しやすいケース

  • テクスチャが乏しい、または一様な面:白い壁、無地の床、空などは光度一貫性の手がかりが乏しく、深度が定まらないか、周辺のノイズに引きずられた誤った深度になる。
  • 鏡面反射・透明・半透明な物体:ガラス、水面、金属光沢面は、視点によって見え方そのものが変わり光度一貫性の仮定が破綻する。
  • 繰り返しパターン:タイル、レンガ、農地の畝などは、誤った深度でも局所的には光度一貫性が高くなる「ゴースト解」が生じやすい。
  • オクルージョン(遮蔽):一部の視点からしか見えない領域は、可視性の推定を誤ると誤った画像を使って光度一貫性を評価してしまい、深度が破綻する。
  • 視点数・視差の不足:カバーする視点が少ない、あるいは視差が小さすぎると、そもそも深度方向の分解能が出ない。

12. 実用上の選び方

  • 姿勢が既にSfMやキャリブレーションで分かっている前提で、精度優先のオフライン3D復元(文化財記録、建築測量、映像制作向けフォトグラメトリ)が目的なら、COLMAPのdenseパイプラインなどPlane-Sweep系の実装が扱いやすい出発点になる。
  • 斜面や複雑な局所形状の精度を特に重視するなら、PMVS系のPatch-basedアプローチや、その考え方を取り込んだハイブリッド実装を検討する。
  • テクスチャの乏しいシーンや繰り返しパターンが多いことが事前に分かっているなら、学習ベース手法(MVSNet系)の方が頑健な傾向がある。ただし学習データの分布外のシーンでは性能低下の可能性があるため、対象ドメインに近いデータで評価してから採用する。
  • リアルタイム性が必要なロボット・AR/VR・自動運転の障害物検知には、MVSではなくステレオカメラやデプスカメラを検討する。MVSはあくまでオフラインでの高密度・高精度復元が主戦場である。
  • 最終成果物としてメッシュやテクスチャ付き3Dモデルが必要なら、深度マップ融合の段階でTSDF融合かPoisson Surface Reconstructionを選び、点群だけで十分ならそこで止めてよい。

13. まとめ

Multi-View Stereoは、SfMやキャリブレーションで既に分かっているカメラ姿勢を前提に、光度一貫性を手がかりとして密な深度を復元する技術である。Plane-Sweep法とPatch-based法という2つの古典的アプローチはトレードオフが異なり、近年はコストボリュームを学習するMVSNet系の手法が精度と頑健性を押し上げている。得られた深度マップを融合してメッシュ化するところまでが一連の流れであり、リアルタイム性を捨てて精度を取るMVSと、リアルタイム性を優先するステレオ・デプスカメラという住み分けを理解しておくことが、実用上の選択を誤らないための土台になる。

理解を確かめる
点群を密にすれば形状の精度も必ず上がる?

誤った深度を増やしても正確にはならない。視点間整合、遮蔽、反射、低テクスチャを確認し、密度と精度を分けて評価する。

参考資料

現在の項目 · 14 / 19 · コンピュータビジョン入門

次に読む

前提を確認するバンドル調整基礎入門 — カメラ姿勢と3D点を同時に磨き上げる非線形最小二乗シリーズの次の内容へ進むVO/VIO入門 — カメラとIMUで移動を推定するための実践的な基礎同じ分野を別の観点から読む画像の明るさ・輝度 Lab — 露出、ガンマ、クリッピングを比較