導入
3次元空間を異なる位置のカメラから撮影したときの幾何のこと。
「カメラ $O_L$ から見ると $X_L$ に物体が写っている」ことしか分かっていない時点では、 $X, X_1, X_2, X_3$ のどこに物体があるかわからない。「カメラ $O_R$ から見て $X_R$ に同じ物体が写っている」ことも分かった場合は、 $X$ に物体があると特定できる。
-
エピポーラ線(Epiline) : 図の赤線
- 「カメラ $O_L$ から見て $X_L$ に物体が写っている」とき、「カメラ $O_R$ から見てどこに物体が写るか」の候補
-
エピポール(Epipole) : 図の点 $e_L, e_R$
- 一方のカメラから他方のカメラが写る位置のこと
- 物体の位置に関係なく一定
- どの物体のエピポーラ線もエピポールで交わる
-
エピポーラ面(Epipolar Plane) : 図の緑面 $O_L X O_R$
- 物体の位置と2つのカメラ位置の3点で決まる平面
- エピポーラ線・エピポールはエピポーラ面上にある
エピポーラ拘束
$P$ にある物体は、カメラ $C$ からは $\boldsymbol{p}$ 、カメラ $C'$ からは $\boldsymbol{p'}$ に写る。
- $\boldsymbol{p} = (x_p, y_p, 1)$
- $C$ を原点とした同次座標系( $C$ 座標系)
- $\boldsymbol{p'} = (x_{p'}, y_{p'}, 1)$
- $C'$ を原点とした同次座標系( $C'$ 座標系)
ここで、以下のことがいえる。
- 「カメラ $C$ から見て $p$ に物体が写っている」ことしか分かっていない時点では、カメラ $C'$ でその物体が写る( $\boldsymbol{p'}$ がある)位置は「エピポーラ線上のどこか」に限定される。
- 「カメラ $C'$ から見て $p'$ に物体が写っている」ことしか分かっていない時点では、カメラ $C$ でその物体が写る( $\boldsymbol{p}$ がある)位置は「エピポーラ線上のどこか」に限定される。
このことを**エピポーラ拘束(Epipolar Constraint)**と呼ぶ。
次に、エピポーラ拘束を数式で表すことを考える。
基本行列による表現
上記1.を基に話を進める(最終的には1.と2.が同じ数式で表される)。
上記1.は、以下のように表せる。
「 $\boldsymbol{p'} = (x_{p'}, y_{p'}, 1)$ はエピポーラ線上にある」 --- (1-1)
エピポーラ線の方程式を $ax + by + c = 0$ とし、さらに係数ベクトル $(a, b, c)$ を $\boldsymbol{l}$ とする。
すると、(1-1)は以下のように書き換えられる。
「 $\boldsymbol{p'} = (x_{p'}, y_{p'}, 1)$ は $\boldsymbol {p'} \cdot \boldsymbol{l} = a x_{p'} + b y_{p'} + c = 0$ を満たす」
$\Leftrightarrow$ 「$\boldsymbol{p'} = (x_{p'}, y_{p'}, 1)$ は $\boldsymbol{l}$ と常に垂直である」 --- (1-2)
これを満たす $\boldsymbol{l}$ を決めたい。 $\boldsymbol{p'}$ はエピポーラ面上にあるため、 $\boldsymbol{l}$ はエピポーラ面に垂直であればよい。
よって、 $\boldsymbol{l} = \boldsymbol{t} \times R \ \boldsymbol{p}$ とする(以下理由より)。
- 理由
- 2つのベクトルの外積はそれらのベクトルが張る平面に垂直である(外積の定義より)
- $\boldsymbol{t}$ はエピポーラ面上のベクトルである(図より)
- 図では始点が $C$ だが、ここでは $C'$ 座標系で取り扱っていることに注意
- $R \ \boldsymbol{p}$ はどちらもエピポーラ面上のベクトルである
- $C$ 座標系の $\boldsymbol{p}$ を $C'$ 座標系で取り扱うために $R$ を作用させている
これにより、(1-2)は以下のように書き換えられる。
「 $\boldsymbol{p'} = (x_{p'}, y_{p'}, 1)$ は $\boldsymbol{p'} \cdot (\boldsymbol{t} \times R \ \boldsymbol{p}) = 0$ を満たす」 --- (1-3)
さらに、ベクトル $\boldsymbol{t}$ と行列 $R$ を一括で扱うため変形する。
ベクトル $\boldsymbol{t}$ による外積と同じ作用となる行列は歪対称行列 $[\boldsymbol{t}]_{\times}$ として表せる。
これにより、(1-3)は以下のように書き換えられる。
「 $\boldsymbol{p'} = (x_{p'}, y_{p'}, 1)$ は $\boldsymbol{p'} \cdot ([\boldsymbol{t}]_{\times} R \ \boldsymbol{p}) = 0$ を満たす」 --- (1-4)
ここで、 $E = [\boldsymbol{t}]_{\times} R$ とおく。この $E$ を**基本行列(Essential Matrix)**と呼ぶ。
基本行列 $E$ を用いて(1-4)の条件式を書き換えると、以下のようになる。
$$\boldsymbol{p'}^T \ E \ \boldsymbol{p} = 0 \tag{1}$$
これが、基本行列を用いて表したエピポーラ拘束であり、上記2.における $\boldsymbol{p}$ に求められる条件でもある。
基礎行列による表現
カメラ固有のパラメータ(レンズ歪み等)を内部パラメータと呼ぶ。
ここまでは、カメラキャリブレーションにより内部パラメータが分かっており、その影響を除去したものとして考えていた。
そうでない場合、物体は $\boldsymbol{p}, \boldsymbol{p'}$ とずれた位置に写る。
カメラ $C$ の内部パラメータを $K$ 、カメラ $C'$ の内部パラメータを $K'$ とおく。
すなわち内部パラメータによって、カメラ $C$ からは $\boldsymbol{m} = K \boldsymbol{p}$ に、カメラ $C'$ からは $\boldsymbol{m'} = K' \boldsymbol{p'}$ に物体が写る。
式(1)を $\boldsymbol{m}, \boldsymbol{m'}$ を用いて書き換えると、以下のようになる。
$$\boldsymbol{m'}^T ({K'}^{-1})^T \ E \ K^{-1} \boldsymbol{m} = 0 \tag{2}$$
ここで、 $F = ({K'}^{-1})^T \ E \ K^{-1}$ とおく。この $F$ を**基礎行列(Fundamental Matrix)**と呼ぶ。
基礎行列 $F$ を用いて式(2)を書き換えると、以下のようになる。
$$\boldsymbol{m'}^T F \boldsymbol{m} = 0 \tag{3}$$
基本行列と基礎行列の違い
- 基本行列
- カメラキャリブレーション済であると仮定している
- カメラ間の移動・回転関係にのみ依存している
- 基礎行列
- カメラキャリブレーションされていないと仮定している
- カメラ間の移動・回転関係及び、各カメラの内部パラメータに依存している