Stereo Vision
ステレオビジョン(stereo vision)は、既知のベースライン(baseline) だけ離れた2台のキャリブレーション済みカメラから深度を復元する。両カメラ間の相対姿勢が固定かつ既知であるため、一方の画像における場面中の点の位置は、他方の画像に現れうる位置を制約し、2つの観測間の水平方向のずれがメトリックな深度を符号化する。
Disparity(視差)と深度
整列化(rectification)(両画像を、エピポーラ線が同一の水平走査線になるように変形する処理)を行った後、深度 にある3次元点は左右の画像でそれぞれ水平ピクセル座標 と に現れる。**視差(disparity)**は
であり、 はピクセル単位の焦点距離である。深度はこれを逆算することで復元できる:
が得られれば、ピンホールモデルから3次元点全体が求まる:、。
深度の不確実性
を微分すると、マッチング誤差 (通常はピクセルの一部)が深度にどのように伝播するかがわかる:
深度誤差は距離に対して2次関数的に増大し、ベースラインに対しては反比例する。これがステレオリグの基本的な設計上のトレードオフである:ベースラインを広げると遠方の精度は向上するが、重複視野が狭くなり近距離のマッチングが難しくなる。狭いベースラインではその逆が起こる。ある距離を超えると、視差がマッチング精度以下になり、ステレオペアは実質的に単眼カメラに退化する。
ステレオマッチング
密な**視差マップ(disparity map)**を生成するには、左画像の各ピクセルについて、同じ走査線上の右画像における対応点を見つける必要がある:
- 局所(ブロック)マッチングは、SAD(差の絶対値の和)、NCC(正規化相互相関)、センサス変換などのコストを使って小さなウィンドウを比較する。高速だが、テクスチャのない領域や繰り返しパターンの領域では失敗する。
- **Semi-global matching(SGM)**は平滑性の事前分布を追加する:画素ごとのデータ項に、(小さな視差変化)と (大きな飛び)というペナルティを、画像を横切る複数の1次元パス上で集約したコストと組み合わせて最小化する。SGMはリアルタイムの密ステレオの主力手法であり、多くのステレオ深度センサーがハードウェアまたはGPU上で実行しているものである。
- 整合性チェック(左右チェック、一意性、スペックルフィルタリング)が信頼できない視差を除去する。
疎ステレオ ── 2つの視点間で検出されたキーポイントのみをマッチングする方法 ── は、特徴点ベースのSLAM(例:ORB-SLAM2のステレオモード)で一般的である。これは密マッチングのコストを避けつつ、メトリックなランドマークを提供できるためである。
ステレオ vs. 単眼 vs. RGB-D
ステレオは、固定された工場出荷時にキャリブレーションされたベースラインによる三角測量であり、これがメトリックスケールを可観測にするものである:単眼カメラは未知のスケール係数までしか幾何を復元できないのに対し、ステレオリグはそれをメートル単位に固定する。RGB-Dセンサー(構造化光やTime-of-Flight)と比較すると、パッシブステレオは屋外の太陽光下や長距離でも動作するが、マッチングの手掛かりがないテクスチャのない表面では苦労する。
SLAMにおける意義
ステレオは、単眼SLAMの2つの最難関の問題 ── スケールの曖昧さと初期化 ── を一度に解消する。すべてのステレオフレームが即座にメトリックな3次元ランドマークを与える ── マップを立ち上げるための運動視差は不要である ── そして各新規フレームがスケールを再測定するため、スケールがドリフトすることはない。これが、ステレオ(およびステレオ・慣性融合)構成がロボティクスの実運用でデフォルトとなっている理由であり、視差-深度関係とその2次関数的な誤差増大を理解することが、ベースラインの選択や信頼できる深度のしきい値の設定(例:ORB-SLAM2における「近い vs. 遠い」点の区別)に不可欠な理由である。