はじめに
カメラの焦点距離を推定する方法として、2つの消失点を使用する方法がある。消失点は平行の関係にある複数の直線が画像上で交わる点である。実空間上では平行する直線が交わることはなく、画像上にある消失点は実空間上においては遥か彼方に存在している点ということになる。透視投影モデルにおいて、カメラ光学中心から画像上の消失点に対して張ったベクトルは、消失点を成す平行の関係にある実空間上の直線と平行の関係にある。つまり、透視投影モデルにおいて、カメラ光学中心から画像上の二つの消失点に対して張った2つのベクトルの成す角度は、各消失点を成す平行線の成す角度と同じになる。
算出方法
消失点A,Bの内積の関係から、
両辺を二乗し、絶対値を外し、左辺にまとめると
これをについて解くと
が得られる。焦点距離は常に正の実数なので、解候補は最大で2つ得られる。(クソ長数式自動で改行する方法知りたい)
実装
- 画像を読み込む。(場合によっては歪曲収差係数ファイルも読み込む。)
- 平行線群を2グループ作成し、消失点を2つ計算する。
- 平行線の角度を与える。(初期値90度)
- 焦点距離を計算する。
実験
シミュレーションによる検証と実機(ドラレコ)を用いた実験を行った。
シミュレーション検証
シミュレーション環境は以下の記事で紹介したソフトを使用して、既知の焦点距離のカメラを模擬して生成した画像に対して焦点距離の推定を行った。被写体は路面標示の「横断歩道又は自転車横断帯あり」(以後ダイヤマーク)を模擬した菱形の頂点を散布図として描画した。
jonajiro.hatenablog.com
検証1,2ではFOV85 deg.のカメラを使用した。双方で解は1候補のみ計算され(片方は虚数解)、最大9pixel以下の誤差があった。
検証3,4ではFOV:65 deg.のカメラを使用し、双方で解は2候補計算されたが、片方候補が110と異常に小さく、FOVに換算すると167 deg.と異常に大きくなることから候補からは除外される。候補と考えられる解は、最大で4pixel以下の誤差があった。