OpenCVの内部パラメータでOpenGLの透視投影行列を作成(そのに)
以前にもOpenCVの内部パラメータでOpenGLの透視投影行列(フラスタム行列)を作成するコードを掲載しましたが,あれが数学的に何をやっているのかちょこっと解説します.元はパワポですが,SlideShareにアップロードするまでもない量と内容なので画像でスライドを掲載します.
OpenCVとOpenGLの座標系
OpenCVのデフォルトの座標系は左図,OpenGLの座標系は右図の通りです.OpenGLの方では暗黙的に,主点(光軸中心)が原点でZ軸と光軸が完全に一致しています.ですので,OpenCVとOpenGLを渡り歩くときには,この図に従って適切に座標変換する必要があります.OpenCVのカメラモデルでは画素の剪断変形はありませんが,画素自体のアスペクト比が考慮されているため,fx=fyとは限りません.
透視投影行列
さて,透視投影行列とは,空間の3次元位置を正規化デバイス座標系([-1,1]の3次元空間)にうまく圧縮する行列です.透視投影では視体積が錐体の頭を切り取った形をしているので,このような複雑な行列で変換する必要があります.なお,Z軸は出力写像が入力の反比例の関係になるように定められています.
OpenCV内部パラメータ表示
導出と考え方は画像の通りです.znのあたりは透視投影行列の導出方法と合わせて読むと理解できると思います.