カメラ外部パラメータとは

外部パラメータとはなんぞや?という話ですが、一言でいうと

世界座標をカメラ座標に変換する行列」のことです。

式で表すとこうですね。

待て待て、それだけ言われてもわからない。
という人の為に、もう少し詳しく解説してみたいと思います。

外部パラメータの意味

世界座標系は、下の図のようにすべての基準となる1つしかない座標系で、「すべての3次元点の絶対的な位置」を表しています。
現実世界の緯度経度と高度と思ってもらえれば大丈夫だと思います。

カメラ座標系は下の図のような座標系で「このカメラから見て3次元点がどの位置にあるか」を表しています。
したがって画像の枚数だけカメラ座標系も存在します。

さて、ではどうやって世界座標系で表現された点をカメラ座標系に変換しましょうか?
実はこれ、カメラの姿勢(回転行列)と位置(並進ベクトル)がわかれば、変換できちゃうんです。

まず、世界座標点に回転行列を掛けて回転させてやります。

で、実は世界座標点を回転させるのって、世界座標系自体を逆回転させるのと、便宜的には同じなんです。
さらに、世界座標系を回転行列分逆回転させると、なんとカメラ座標系と同じ方向を向くんです!← 重要
つまり、世界座標点に回転行列を掛けることによって、【カメラ座標系の姿勢から見た、3次元点の見える方向】を求めることができるのです!!

しかし、同じ方向を向いたとはいえ、世界座標系の原点とカメラ座標系の原点は違うので、まだカメラ座標にはなってません。なので、並進ベクトルを使って原点をそろえてあげましょう。

さあ、これで世界座標系で見た3次元点をカメラ座標に変換することができました。
これを数式にまとめると以下のようになります。


これで外部パラメータの持つ意味は完璧ですね!
最後に、同次座標というテクニックを使って式を変形してやれば、記事のはじめの式と同じ形になります。
(同次座標がわからない人も、両方の式を展開してみると同じ式であることが確認できるかと思います。)

反対に、外部パラメータを使ったカメラ座標系から世界座標系への変換したい場合の手順は、こちらの記事で解説しています。

コメント

  1. よろしくお願いします より:

    初歩的な質問で申し訳ありません。
    ここに載っているどの図も左手座標系ですが、カメラの分野では左手座標系なのですか?

    • 管理人 より:

      画像処理ライブラリのOpenCVなどは右手座標系ですし、OpenGLやUnityなどは左手座標系を使っているので使うツールによって決めることが多い印象です。
      あくまで個人的な印象ですが、画像座標系を扱うときは画像の左上を(x, y)=(0, 0)と置くことが多い関係上、右手座標系が使われることが多いです。
      本ブログでも、他の記事は右手座標系を使っているのにこの記事だけ左手座標系を使っているので、そのうち直したいなと思ってます。