
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ランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
CPUが16bitでも32bitOSでコンパ...
-
最初に聞かれたこと
-
c言語の問題の説明、各所ごとに
-
Cのオブジェクトファイルの逆ア...
-
C言語 関数、変数の宣言について
-
C言語について。
-
C言語でファクト関数を使わずに...
-
プログラミング 素数か素数では...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
int16_t の _t は何?
-
DLLファイルの逆コンパイラにつ...
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
DNCL(共テ用プログラミング言語...
-
C言語 配列と関数の練習問題
-
gccを行ってもexeファイルが生...
-
C言語 列挙型(enum型)変数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
繰り返し1行~28行までを順順に...
-
MATLABにおける行の挿入方法
-
c言語
-
C言語で余りがマイナスになる場合
-
!(否定)演算子について
-
五目並べ
-
Matlabのspdiags関数
-
StandardMLで整数リストの奇数...
-
Z80のフラグレジスタについて
-
matlab、対角行列の作り方
-
H8マイコン C言語でのプロ...
-
Pythonの公式リファレンスガイド
-
最大値を見つけるプログラム。
-
【MATLAB】配列内の数値のキャ...
-
MATLABのデータ抽出についてお...
-
OPENCVを使ったエピポーラ幾何...
-
パイソンのプログラミングにつ...
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
配列数式の解除
おすすめ情報