
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年
A 回答 (2件)
- 最新から表示
- 回答順に表示
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/
回答ありがとうございます。
紹介いただいた文献を読んで頑張ってみようと思います。
ただ、ざっと目を通したのですが、いずれの文献でも
Rは「3×3の回転行列」であるとされるのみで、
>Rはどのような形になるのでしょうか?
の明確な答えは記載されていないように思います。
できましたら、その点だけでもお教えいただけませんでしょうか。
それとも、Rは手法などで変化して一概にこうだと言えないものなのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
繰り返し1行~28行までを順順に...
-
MATLABにおける行の挿入方法
-
C言語で余りがマイナスになる場合
-
特定のPCだけ動作しないVBAマク...
-
String""から型'Double'への変...
-
エクセルで特定の列が0表示の場...
-
教えて下さい
-
配列数式の解除
-
【エクセル】測定時間がバラバ...
-
UserForm1.Showでエラーになり...
-
【VB.NET】 パワポ操作を非表示で
-
一つのTeratermのマクロで複数...
-
Excelのセル値に基づいて図形の...
-
ActiveCell.FormulaR1C1の変数
-
EXCELマクロでのThisisWor...
-
メッセージボックスのOKボタ...
-
matlabでのエラー コールバッ...
-
エクセルで縦に並んだデータを...
-
マクロを使用して、A列にある文...
-
特定のセル範囲で4文字以上入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
繰り返し1行~28行までを順順に...
-
!(否定)演算子について
-
MATLABにおける行の挿入方法
-
H8マイコン C言語でのプロ...
-
≪C言語≫キー入力の判断について
-
C言語で余りがマイナスになる場合
-
c言語
-
Z80のフラグレジスタについて
-
OPENCVを使ったエピポーラ幾何...
-
if文について教えてください
-
matlab、対角行列の作り方
-
パイソンのプログラミングにつ...
-
プログラムについて。
-
最大値を見つけるプログラム。
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
配列数式の解除
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
おすすめ情報