• 締切済み

OPENCVを使ったエピポーラ幾何からのカメラ運動推定

OPENCVでUSBカメラを動かしながら撮影した画像列から、 カメラがどのように動いたかを推定したいと考えています。 物体の3次元復元ではなく、カメラの6自由度の運動パラメータの復元がしたいのです。 FindFundamentalMat()を使って、2枚の画像間の対応点から 基礎行列(F行列)を求めることは出来ました。 しかし、このF行列から運動パラメータを復元する方法が分かりません。 参考書やウェブで調べても、F行列の求め方や、 F行列が回転・並進の運動パラメータと未知の内部パラメータの情報を含む、 といった説明はあるのですが、 そこから回転と並進の運動パラメータを復元する説明がなく、 「F行列からRとtが復元できる」と簡単に書かれているばかりです。 具体的にどのような操作をすれば、F行列から回転Rと並進tが求まるのでしょうか? また、最終的に得たい情報は「各軸回りの回転角は何度か?」と 「各軸方向にどれだけ動いたか?」であるわけですが、 F行列から求まるRはどのような形になるのでしょうか? 参考書ではRは『3×3の行列』だとしているのですが、 R= |1 0  0 | |cosY 0 sinY||cosZ -sinZ 0| |0 cosX -sinX| |0  1  0 ||sinZ cosZ 0| |0 sinX cosX| |-sinY 0 cosY||0  0  1| だともされています。 単純に、この3つの行列の掛け算結果が3×3行列の形で求まるのでしょうか? できれば、実例をあげて説明していただくか、 そのようなものが掲載されている書籍かサイト(できれば日本語で)を 教えていただけますでしょうか。 どうかよろしくお願いします。 なお、参考書として以下を利用しています。 「コンピュータビジョン-視覚の幾何学-」佐藤淳著 コロナ社刊 1999年

みんなの回答

回答No.2

こんにちは. 基礎行列の特異値分解の結果を利用して回転行列と歪み対称行列を分離するのですから, 回転行列が3*3行列Rとして出てくるのは当然です. 軸周りの回転角が必要なら,この回転行列Rをさらに分解します. 質問者様が書いておられる回転行列は所謂, 「Eular角による表現」というもので,quaternion等と同じく, 回転行列の表現の一つです. det(R)=1の回転行列Rの分解方法は「まともな方法で調べれば」すぐに出てきます. ただし,Eular角の表現は一意に決まらなかった(6通り?)気がしますが. 老婆心ですが,その段階で躓いているとするとこれから相当に大変ですよ.

回答No.1

こんにちは. カメラが校正されているかどうかで話が変わってきます. 校正されているなら基礎行列から基本行列(参考書85項)を作って分解してください. 未校正の場合は基礎行列は7DOFしかないので, 内部パラメターは全ては計算できません. 普通は焦点距離f,相対的なRとtで(1+3+3)DOFを復元します. 参考文献は[1]辺りが適切でしょう. 著者様の研究室のページ(検索すればすぐ分かります)からPDFが入手できます. [1]が難解であれば[2]を奨めます. 当該分野で比類無き教科書です. 質問に関することがかかれている章 「Epipolar Geometry and the Fundamental Matrix」 は参考 URL からPDFサンプルが入手できます. [1] 金谷健一,松永 力,基礎行列の分解: 焦点距離の直接的表現 情報処理学会研究報告, 2000-CVIM-120-7,2000.1.20-21,pp. 49-56 [2] Multiple View Geometry in Computer Vision Second Edition Richard Hartley and Andrew Zisserman, Cambridge University Press, March 2004.

参考URL:
http://www.robots.ox.ac.uk/~vgg/hzbook/
sinsyu-ya
質問者

お礼

回答ありがとうございます。 紹介いただいた文献を読んで頑張ってみようと思います。 ただ、ざっと目を通したのですが、いずれの文献でも Rは「3×3の回転行列」であるとされるのみで、 >Rはどのような形になるのでしょうか? の明確な答えは記載されていないように思います。 できましたら、その点だけでもお教えいただけませんでしょうか。 それとも、Rは手法などで変化して一概にこうだと言えないものなのでしょうか。

関連するQ&A