カメラの基本行列を理解する、エピポーラ線を描く
2つの画像におけるの投影点を,とし、それを対応付ける行列を求めます。を基本行列と呼び、以下が成り立ちます[1]。
の表すもの
,,の位置関係を図示するとFig1のようになっています。
Fig1. ,,の位置関係
はを回転、平行移動することで表すことができるので、回転を、平行移動をとして
と書けます。, は同一平面上にあるので、この外積は平面上の垂線ベクトルを表します。
また、も同様に同一平面上にあるので、垂線ベクトルと直交する(=垂線ベクトルとの内積が0となる)ことから
となります。ここで、外積を行列表現します。
の時
と表せるので、(3)は
ここで、
と表せます。はのことですね。
また、(1)の両辺の転置を取ると、
となるので、をに対応付ける行列はであると言えます。
の性質
- はカメラの内部パラメータで正規化済みの点,の対応を求めたものです。正規化をしていない点,に関しては、で正規化を行うと, と表せるので、
と表せ、と置き、を基礎行列と呼びます。
- のランクについて、(を変形してランクを調べる操作をすると分かる)、から、である[2]と言えます。(についても同様です。)
エピ極、エピポーラ線の求め方
画像1の光学中心を画像2の光学中心に投影した点がエピ極です(Fig1.の)。また、とを結んだ線をエピポーラ線と呼びます。すべてのエピポーラ線はエピ極を通過します。これは、
と表すことが出来ます。(どんなに対してもによってと対応づけることが出来る。)ここから、
ということが分かり、これを解くことでが求まります。(特異値分解で解ける)
を通るエピポーラ線は、
として求めることが出来ます。これはという直線を表し、は直線の係数ということになります。
基礎行列の求め方
8点アルゴリズムというシンプルな方法で解くことを考えます。(1)を要素で表し、
とします。これを書き換えると、
ここで、
と表せます。対応点が8点ある場合、
となり、これを解くことでが求まります。(の特異値分解で解きます。)
の性質として、となるはずですが、対応点データが正確でない限り求めた解はになるとは限りません。よって、最終的な解のランクが2になるように事後調整など行います[3]。
実装
以下の実装に、エピポーラ線を描く部分を加えました。tukurutanoshi.hateblo.jp
3段目左はカメラ1から物体を見た画像(画像1)、右はカメラ2から物体を見た画像(画像2)です。
カメラ1はワールド座標系と同じ座標軸、カメラ2はz方向に4だけ移動したもので、画像1,2ともエピポーラ線は画像中心で交わっています。
参考
[1]視覚の幾何学3 キャリブレーションhttp://www.wakayama-u.ac.jp/~wuhy/cv11.pdf
[2]正則行列と逆行列の諸性質,https://risalc.info/src/inverse-matrix.html#rank
[3]画像の三次元理解のための最適化計算[III], http://www.iim.cs.tut.ac.jp/~kanatani/papers/ieicefit3.pdf
[4]実践コンピュータビジョン, https://www.oreilly.co.jp/pub/9784873116075/index.html