あらいさん日記(仮)

あらい日記

活動の記録

基準立方体を用いたカメラキャリブレーション

概要

立方体を用いてカメラのキャリブレーションを行い,カメラパラメータを求めました.立方体を用いることでワンショットでキャリブレーションができます.

カメラキャリブレーション

幾何学的カメラキャリブレーションの手法としてはZhangのチェスボードを用いる方法が有名です.この手法ではチェスボードを動かしながら複数枚撮影することで,キャリブレーションをすることができます.チェスボードは手軽に用意することができます.また,OpenCVMATLABでは専用のプログラムが実装されています.

チェスボードを用いない手法としては,形が既知の物体を用いる方法があります.

f:id:raccoon15:20190428230200j:plain

基準立方体

今回は上の図のような基準立方体を使います.立方体の大きさは8×8×8cmです.チェスボードと比較して,基準立方体を使うメリットは2つあります.

1. ワンショットでキャリブレーションを行うことができる

基準立方体をカメラで撮影すると,3面を同時に撮影することができます.そのため,チェスボードのように動かしながら複数枚撮影する必要がありません.

2. プロジェクタのキャリブレーションにも適用しやすい

プロジェクタのキャリブレーションを行う場合は,パターンを投影してカメラで撮影します.このとき黒い領域では,投影したパターンが暗くなるので観測しにくくなります.この基準立方体では,各面には辺に沿って黒いマーカをつけています.このマーカを対辺どうしで直線で結んだ時の縦線,横線が交わる点を基準点として獲得できます.このとき基準点は全て白い領域なので,投影したパターンを観測しやすいという利点があります.

立方体の世界座標

まず,基準立方体の座標系について設定します.立方体のある頂点Oを原点として定め,世界座標系で(0, 0, 0)としました.辺に沿って,x軸,y軸,z軸を設定しました.立方体の大きさは既知なので,各面上の点の座標がわかります.

f:id:raccoon15:20190503014319j:plain

基準立方体の世界座標

立方体のカメラ座標の獲得

基準立方体の世界座標と対応するカメラ座標を求めます.

基準立方体を撮影した画像を用意します.背景は模様が無いようにすると,後の処理が楽になります.

f:id:raccoon15:20190502234545p:plain

撮影した基準立方体

撮影した画像を2値化して,黒いマーカがブロブとして検出できるようにします.

f:id:raccoon15:20190502234558p:plain

2値化の結果

ラベリングを行い,黒いマーカの位置を求めます.

f:id:raccoon15:20190502234603p:plain

黒いマーカの検出

対辺どうしのマーカを直線で結んだとした時の縦線,横線が交わる格子点を基準点とします.この立方体では,一辺に7個のマーカがあるので,基準点は一面に49点.それが三面あるので合計で147点数の基準点が得られます.

f:id:raccoon15:20190502234610p:plain

格子点を求める

カメラパラメータの計算

世界座標系でのある点(X, Y, Z)と,カメラ座標系での画像の二次元座標(X_{c}, Y_{c})との関係は次式で表すことができます.

h \begin{pmatrix} X_{c} \\ Y_{c} \\ 1 \end{pmatrix} = \begin{pmatrix} C_{11}  C_{12}  C_{13}  C_{14} \\ C_{21}  C_{22}  C_{23}  C_{24} \\ C_{31} C_{32} C_{33} C_{34} \end{pmatrix}\begin{pmatrix} X \\ Y \\ Z \\ 1 \end{pmatrix}

この式を展開して,媒介変数hを消去すると,

(C_{11}-C_{31}X_{c})X+(C_{12}-C_{32}X_{c})Y+(C_{13}-C_{33}X_{c})Z = C_{34}X_{c}-C_{14}

(C_{21}-C_{31}Y_{c})X+(C_{22}-C_{32}Y_{c})Y+(C_{23}-C_{33}Y_{c})Z = C_{34}Y_{c}-C_{24}

式より,(X, Y, Z)(X_{c}, Y_{c})の対応が既知の点が1点あれば2つの方程式を作ることができます.求めたいカメラパラメータCは3×4の行列なので,未知数は12個です.そのため最低6組の点があれば方程式を12個作ることができ,カメラパラメータCを求めることができます.

実際には6組以上の点を使い,最小二乗法を適用することでパラメータを求めるます.

プロジェクタキャリブレーション

カメラパラメータを求める式を用いることで,プロジェクタのパラメータを求めることができます.このとき必要になるのは,プロジェクタ座標系のある点の座標と,それに対応する世界座標系の点の座標です.プロジェクタは光を出力する装置なので,カメラのように直接撮影して座標を求めることができません.そのため,プロジェクタから投影したパターンをカメラで撮影することで座標の対応関係を獲得する方法がよく使われます.もっとも簡単な方法は,プロジェクタからある1点だけを光らせ,それをカメラで撮影することです.これを全ての点に対して行うことで,プロジェクタとカメラの対応関係を求まります.しかし,この方法では非常に時間がかかるので,グレイコードパターンを投影する方法などが用いられます.