688 文字
3 分
画像座標系からカメラ座標系への変換
2018-10-13
2018-12-02

画像座標点をカメラ座標点に変換することを考えてみます。

タイトル詐欺で申し訳ないですが、結論から言うと画像座標点をカメラ座標点への変換はできません。できるのはカメラ座標系原点からカメラ座標点方向へのベクトルを計算することだけです。

まぁ、2次元から3次元への変換なんて、明らかに奥行きの情報が足りてないから当然ですよね。なので今回は、このベクトル変換方法についてまとめてみます。

画像座標点からカメラ座標ベクトルへの変換#

内部パラメータが既知の場合、カメラ座標系原点からカメラ座標点方向を計算できます。

これを説明しやすくするためカメラ座標ベクトルと呼ぶことにします。下の図の赤のベクトルのことですね。

このカメラ座標ベクトルの求め方を今回はまとめてみます。

イメージ図

カメラ座標ベクトルとか画像座標点に内部パラメータの逆行列を掛ければいいんでしょ?とか思ってるそこのあなた!!逆行列の計算コストはそれなりに高いです。

そんなことしなくてもカメラ座標ベクトルは求められます。この辺の話は、内部パラメータの意味を理解してればわかると思います。

内部パラメータの意味を知らない人はまずはこちらを理解しましょう。

それでは、カメラ座標ベクトルの求め方を順を追って説明します。

なお、内部パラメータは例によってこれで表記します。

数式

1. 画像座標系原点を移動させる#

イメージ図

まずは考えやすくするため、カメラ座標系のZ軸上に画像座標系原点があると考えます。

すなわち、光学中心の(u,v)(u,v)分画像座標系原点を移動させるので、画像座標系(u,v)(u,v)は移動後(ucx,vcy)(u-c_x,v-c_y)となります。

2. カメラ座標ベクトルを求める#

イメージ図

さて、ここで内部パラメータの意味を思い出してほしいのですが、カメラ座標点を焦点距離ffの位置に集めたものが画像座標系でした。

なので、画像座標点の奥行はffということになるので、(ucx,vcy,f)(u-c_x, v-c_y,f)となります。

ですので、カメラ座標ベクトルは(ucx,vcy,f)(u-c_x, v-c_y,f)となります。

fxf_xfyf_yの値が異なる場合は、(ucxfx,vcyfy,1)(\frac{u-c_x}{f_x},\frac{v-c_y}{f_y},1)とした方が考えやすいかもです。