質問: ir_M_world この1,2の世界座標系は同一の座標系を示している必要が有ると思いますが、 その座標系は誰がいつ設定しているのでしょうか? それともチェスボードの中心を世界座標系の原点とする。等の前提があるのでしょうか? どなたかアドバイス頂ければと思います。 ### 補足情報(言語/FW/ツール等のバージョンなど) gml c++ camera calibration toolbox Kinect V2
回答: OpenCVについては未熟(門外漢と言うべき)のため、概念等の解釈に誤りがありましたらご容赦ください(むしろお教えいただきたいところです)。 このページを読んで解釈したところでは、カメラ外部パラメータによって画像上の位置と対応付けられる3次元空間上の世界座標というものは、プログラマーが勝手に決めるもののように思います。 外部パラメータはcvCalibrateCamera2や、既に内部パラメータが分かっていればcvFindExtrinsicCameraParams2を使って推定して求める様子ですので、これらに与える3次元空間上の点がどのようなものであるかによって外部パラメータ、つまり世界座標からカメラ座標に変換する行列が決定するものと思います。 チェスボードのような物体をカメラで撮影したとして、例えばプログラマーが「ボードのこの角はレンズから前方にz、視線から水平にx、垂直yに位置する」とか、「ボードの中心を原点、ボード面前方をz+、右縁をx+、上縁をy+、単位長さを1mとすると、この点は(x, y, z)だ」などと恣意的に決め、それを画像上の対応する点とともに関数に渡せば、この二つの座標系間の変換行列ができあがる、という感じではないでしょうか。 いずれにしても、今回の場合、ご提示のサイトの方が必要としていたのはIR画像座標系とRGB画像座標系を繋ぐ変換行列のようですので、プログラマーが一貫した世界座標を定めて外部パラメータを求めておけば、その世界座標系がどのようなものであっても、rgb_M_world×(ir_M_world)^-1の過程で打ち消し合うでしょうから問題は生じないのではないでしょうか。 [追記] こちらのサンプルコードですと、チェスボードの角を原点にして、ミリメートル単位になるような座標系を定めているようです。「GML C++ Camera Calibration Toolbox」もちょっとUIを見た感じでは似ているようですし、この座標系が標準なんでしょうかね?