コンピュータステレオビジョン

**コンピュータステレオビジョン**（、計算機立体視）は、CCDカメラによって得られるようなデジタル画像から三次元（3D）情報を抽出する技術である。2つの視点から見た光景の情報を比較することによって、2つのパネルに写っている物体の相対的な位置を調べることで、3D情報を抽出することができる。これは生物学的な過程である「立体視」に似ている。

## 概要
従来のステレオビジョンでは，人間のと同じように，ある光景の異なる2つの視点を得るために水平方向に配置された2台のカメラが用いられる。これらの2つの画像を比較することによって、相対的な奥行き情報を、対応する画像点の水平座標の差を符号化した視差マップの形で得ることができる。この視差マップの値は、対応するピクセル位置での光景の深さに反比例する。

人間が2つの映像を比較するためには、立体視装置で重ね合わせ、右のカメラの映像は観察者の右目に、左のカメラの映像は左目に見せる必要がある。

コンピュータビジョンシステムでは、いくつかの前処理工程が必要である。
# 画像はまず、たる型歪みと接線歪みが除去されていなければならない。これにより、観測された画像が理想的なピンホールカメラの投影と一致するようになる。
# 画像のペアを比較するためには、画像を共通の平面に戻して投影しなければならない（）。
# 2つの画像を比較する情報量を最小化する。これにより、2つの画像内の特徴の位置が最もよく推定され、視差マップが作成される。
# 任意で、受信した視差マップを3D点群に投影する。カメラの投影パラメータを利用することで、既知のスケールでの測定値を提供するように点群を計算することができる。

## 能動ステレオビジョン
能動（アクティブ）ステレオビジョンは、ステレオマッチング問題を単純化するために、レーザーやといった光を積極的に利用するステレオビジョンの形態である。対義語は受動（パッシブ）ステレオビジョンである。

; 従来型構造化光ビジョン
: 従来型の構造化光ビジョン（structured-light vision, SLV）は構造化光やレーザーを用いて、プロジェクターとカメラの対応関係を求める。
; 従来型能動ステレオビジョン
: 従来型の能動（アクティブ）ステレオビジョン（active stereo vision, ASV）は構造化光やレーザーを利用するが、ステレオマッチングは受動ステレオビジョンと同じやり方で、カメラ–カメラ対応のためだけに実行される。
; 構造化光ステレオ
: 構造化光ステレオ（structured-light stereo, SLS）は、カメラ-カメラ対応とプロジェクタ-カメラ対応の両方を利用するハイブリッド型である。

## 応用
3Dステレオディスプレイは、エンターテインメント、情報伝達、自動化システムなど様々な分野で利用されている。ステレオビジョンは、ロボット工学などの分野において、自律システムの周辺にある3次元物体の相対的な位置に関する情報を抽出するために非常に重要である。ロボット工学への応用としては、物体認識がある。奥行き情報を利用することで、ロボットが他の基準では別の物体として識別できないような、1つの椅子が別の椅子の前にあるような、隠蔽された画像要素をシステムが分離することができる。

デジタルステレオビジョンの科学的な応用としては、航空測量からの情報抽出、等高線図の算出、さらには3Dビルマッピングのための幾何形状抽出、写真測量による衛星マッピング、NASAのSTEREOプロジェクトで得られたような3D太陽情報の算出などが挙げられる。

## 詳細な定義

画素はある位置の色を記録する。位置は、ピクセルのグリッド内の位置（x、y）とピクセルzまでの深さによって識別される。

立体視では、同じシーンを異なる位置から見た2つの画像を得ることができる。右図では、点Aからの光が、BとDのピンホールカメラの入口を通って、EとHの画像スクリーンに照射されている。

右図では、2つのカメラレンズの中心間の距離は、BD = BC + CDとなっています。以下の三角形の対は相似の関係にある。
* *ACB*と*BFE*
* *ACD*と*DGH*
したがって、変位dは
 \begin{align} 
d &= EF + GH \\ 
&= BF (\frac{EF}{BF} + \frac{GH}{BF})  \\ 
&= BF (\frac{EF}{BF} + \frac{GH}{DG})  \\ 
&= BF (\frac{BC + CD}{AC})  \\ 
&= BF \frac{BD}{AC}  \\ 
&= \frac{k}{z} \\ \end{align}

となる。上式において、
* *k = BD BF*
* *z = AC* はカメラ面から物体への距離である。
したがって、2つのカメラが同じ高さにあり、画像平面が同一平面上にあると仮定すると、2つの画像における同一ピクセル間のy軸方向の変位は
:d = \frac{k}{z} 
である。定義から、kは2台のカメラ間の距離に、レンズから画像までの距離をかけたものである。

2つの画像における奥行き成分z_1およびz_2は、次式で与えられる。
:z_2(x, y) = \min \left \{v : v = z_1(x, y - \frac{k}{z_1(x, y)})\right \} 
:z_1(x, y) = \min \left \{v : v = z_2(x, y + \frac{k}{z_2(x, y)}) \right \} 

### 画像の平行化
画像平面が同一平面でない場合、同一平面であるかのように画像を調整する画像補正（画像の平面化）が必要である。これは、線形変換によって実現することができる。

また、ピンホールカメラで撮影した画像を平面に投影した場合と同等の画像にするために、画像の補正が必要な場合もある。

### 滑らかさ
滑らかさ（smoothness）とは、近い色がどれだけ似ているかを示す指標である。物体の色は、少ない色で構成されている可能性が高いという前提がある。つまり、同じ色の2つの画素を検出した場合、それらは同じ物体に属する可能性が高いということになる。

上述した滑らかさの評価方法は、情報理論に基づいており、あるボクセルの色の影響が、点間の距離に関する正規分布に従って、近くのボクセルの色に影響を与えるという仮定を置いている。このモデルは、世界に関する近似的な仮定に基づいている。

滑らかさの事前想定に基づく別の手法として、自己相関がある。

滑らかさは、世界の特性の一つである。滑らかさは世界の性質であり、画像の性質ではない。例えば、ランダムな点で構成された画像には滑らかさがなく、隣接する点についての推論は役に立たないだろう。

理論的には、滑らかさは世界の他の特性と一緒に学習されるべきである。これは、人間の視覚システムが行っていることであるように思われる。

## 情報測度

### 最小二乗情報測度
正規分布は
:P(x, \mu, \sigma) = \frac{1}{\sigma\sqrt{2\pi}} e^{ -\frac{(x-\mu)^2}{2\sigma^2} }
である。

確率は *L*によって記述される情報量に関係する。
:P(x) = 2^{-L(x)} 
:L(x) = -\log_2{P(x)} 
したがって、
:L(x, \mu, \sigma) = \log_2(\sigma\sqrt{2\pi}) + \frac{(x-\mu)^2}{2\sigma^2}  \log_2 e
となる。

立体映像の比較では、相対的なメッセージ長だけが問題となる。これに基づいて、差の自乗和（Sum of Squares of Differences, SSD）と呼ばれる情報尺度*I*は
:I(x, \mu, \sigma) = \frac{(x-\mu)^2}{\sigma^2}
となる。上式において、
:L(x, \mu, \sigma) = \log_2(\sigma\sqrt{2\pi}) + I(x, \mu, \sigma) \frac{\log_2 e}{2}
である。

SSDの数値を二乗すると処理時間がかかるため、多くの実装では、情報量を計算する基準として差分絶対値和（Sum of Absolute Difference, SAD）を使用している。また、正規化相互相関（NCC）を用いる方法もある。

### 立体映像の情報測度
最小二乗測度は、個々の点z(x, y)での深さが与えられている立体画像の情報量を測るために使うことができる。まず、ある画像を他の画像の観点から表現するために必要な情報を導き出す。これをI_mと呼ぶ。

色の違いを公平に測るためには、色差関数を用いる必要がある。色差関数は色差*cd*を以下のように記述する。2つの画像間のカラーマッチングを記録するために必要な情報の尺度は
:I_m(z_1, z_2) = \frac{1}{\sigma_m^2} \sum_{x, y}\operatorname{cd}(\operatorname{color}_1(x, y + \frac{k}{z_1(x, y)}),  \operatorname{color}_2(x, y))^2 
である。

画像の滑らかさについての仮定がなされている。2つのピクセルは、それらが表すボクセルが近いほど、同じ色になる可能性が高いと仮定する。この測度は、類似した色が同じ深さにグループ化されることを好むように意図されている。例えば、前方の物体が後方の空の領域を覆い隠している場合、滑らかさの測度は、青色のピクセルがすべて同じ深さでグループ化されることを好む。

滑らかさの総合測度は、ボクセル間の距離を色差の期待標準偏差の推定値として使用する。
:I_s(z_1, z_2) = \frac{1}{2 \sigma_h^2} \sum_{i : \{1, 2\}} \sum_{x_1, y_1} \sum_{x_2, y_2} \frac{\operatorname{cd}(\operatorname{color}_i(x_1, y_1),  \operatorname{color}_i(x_2, y_2))^2}{(x_1 - x_2)^2 + (y_1 - y_2)^2 + (z_i(x_1, y_1) - z_i(x_2, y_2))^2} 

全情報量は以下の和で表わされる。
:I_t(z_1, z_2) = I_m(z_1, z_2) + I_s(z_1, z_2)

各ピクセルのz成分は、情報量の最小値を与えるように選択する必要がある。これにより、各ピクセルで最も可能性の高い深さが得られる。全情報量の最小値は
:I_{\operatorname{min}} = \min{\{i : i = I_t(z_1, z_2)\}} \}
である。

左画像と右画像の深度関数は対になっている、
:(z_1, z_2) \in \{(z_1, z_2) : I_t(z_1, z_2) = I_{\operatorname{min}} \}

## 実装の方法
この最小化問題はNP完全である。つまり、この問題の一般的な解を得るには長い時間がかかるということを意味する。しかし、コンピュータにはヒューリスティックな手法が存在し、合理的な時間で結果を近似することができる。また、人工ニューラルネットワークを用いた方法も存在する。 立体視の効率的な実装は、現在、盛んに研究されている分野である。

## 出典

## 関連項目
*
*
*
*コンピュータビジョン
*エピポーラ幾何
*
*
*ステレオカメラ
*写真測量法
*立体視
*三焦点テンソル

## 外部リンク
*Tutorial on uncalibrated stereo vision
*Learn about stereo vision with MATLAB
*Stereo Vision and Rover Navigation Software for Planetary Exploration
*Calculator for choosing stereo baseline and focal length, and for computing expected depth measurement errors
*LIBELAS: Library for Efficient Large-scale Stereo Matching
*Viva3D Stereo Vision manual & depth tutorial
*How to select your Stereo Camera?