Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

OpenCV 外部パラメータについての質問

Q&A

Closed

OpenCV 外部パラメータについて

OpenCVとコンピュータビジョンの参考書を用いて、手を動かしながらカメラの幾何学について勉強しています。
そこで、OpenCV内の外部パラメータについて質問があります。

この外部パラメータは、ワールド座標系基準のカメラの位置・姿勢であると習っています。そして、OpenCVを用いると、お手軽にこの外部パラメータを求めることができ、私は以下のように外部パラメータを推定しています。

試しているコード

E=cv::findEssentialMat(point1, point2);
cv::recoverPose(E, point1, point2, intrinstic_mat, Rotation_element, translation_element);

point1:1枚目の画像から得られた特徴
point2:2枚目の画像から得られた特徴
intrinstic_mat:カメラ行列
Rotation_element:外部パラメータの回転要素
translation_element:外部パラメータの並進要素
E:E行列

このとき算出される外部パラメータ(translation_element、Rotation_element)は、どの座標系をワールド座標系として計算されているものなのでしょうか?
何回か実行してみて、point2を撮影した座標系をワールド座標系にしているように感じたのですが、これは合っていますでしょうか。

1

1Answer

何回か実行してみて、point2を撮影した座標系をワールド座標系にしているように感じたのですが、これは合っていますでしょうか。

合っていると思います。

前提として、ワールド座標系は実装者が好きに決められます。が、簡単のため、いずれかのカメラの座標系と一致させることが多いです。そうすることで、そのカメラの外部パラメータを単位行列(回転なし)、ゼロベクトル(並進なし)にできるからです。

これを踏まえて、OpenCVのリファレンスを読むと、以下の記述があります。

Output rotation matrix. Together with the translation vector, this matrix makes up a tuple that performs a change of basis from the first camera's coordinate system to the second camera's coordinate system. Note that, in general, t can not be used for this tuple, see the parameter described below.

"performs a change of basis from the first camera's coordinate system to the second camera's coordinate system" = (雑な訳)第1のカメラ(1枚目の画像を撮影したカメラ)の座標系を第2のカメラの座標に変換する、とのことなので、第2のカメラ(point2を撮影した座標系)をワールド座標系としているように読めます。

0Like

Comments

  1. 迅速に回答してくださりありがとうございます。
    合っていたようで良かったです。

    プログラムを扱う上では、しっかりと公式リファレンスを見るべきということも、身を持って知れました。何回か実行して試す必要もなく、公式リファレンス見れば一発で解決していたのですね・・・

    丁寧に回答してくださりありがとうございました。これからも勉学に励みます。

Your answer might help someone💌