さあ、これでたぶん、カメラのキャリブレーションが自前でできるぞ。
実際にやってみた。
まず、Windows 7でやっているので、.net framework 1.1がないと怒られた。
http://www.microsoft.com/downloads/details.aspx?familyid=262D25E3-F589-4842-8157-034D1E7CF3A3&displaylang=ja
http://www.microsoft.com/downloads/details.aspx?FamilyId=04DBAF2E-61ED-43F4-8D2A-CCB2BAB7B8EB&displaylang=ja
をダウンロードしてインストール。
http://research.graphicon.ru/calibration/gml-c-camera-calibration-toolbox-5.html
から GML C++ Camera Calibration Toolbox の``Latest Binaries''をダウンロードしてインストール。
インストール先の``Calibration pattern''フォルダ中のpattern_A4.pdfを印刷。
GML Camera Calibration Toolboxを起動して、白紙のアイコンのボタンをクリック。。pattern_A4.pdfを印刷したなら、Object Sizeは7, 10, square sizeは24(実測値を使う事!)くらいを入力。
何らかの方法で印刷したパターンを撮影した画像を用意する。私が使用しているGroovy GR-CAM030では、ボタンを押すと動画のキャプチャソフトが起動する(付属CDからドライバをインストールしたわけではないのでWindows 7標準の機能かもしれない)が、ここでもう一度ボタンを押すと静止画がキャプチャできる。何枚か用意する。この時
http://research.graphicon.ru/calibration/recommendations-for-taking-calibration-photos.html
を参考にして色々な姿勢から撮影する。枚数は多い方が良い。意外と認識に失敗する事が多い。また、全ての画像のサイズは等しくする事。全ての測定結果はピクセルで表される。
プラス記号のアイコンのボタンをクリックして画像を全部追加する。チェッカーボードが二枚重なっているボタンを押すと全ての画像に対して認識が試行される。失敗した画像はマイナスのアイコンのボタンで削除。あまり成功枚数が少ないor姿勢のバリエーションが少なければ、新たに画像を追加してチェッカーボード一枚のアイコンのボタンで個別に認識を試行できる。
カメラのアイコンのボタンを押すとキャリブレーションが実行される。
で、下のようなテキストファイルを作る。分かり易いように``,''を入れたが、これは実際には書いてはいけない。
ARToolKitPlus_CamCal_Rev02
使用した画像の幅, 使用した画像の高さ, 出力されたprincipal pointの一つ目, 出力されたprincipal pointの二つ目, 出力されたfocal lengthの一つ目, 出力されたfocal lengthの二つ目, Distortionの四つの数字を順に, 0.0, 0.0, 10くらいの好きな数字
これで自分のカメラ用のキャリブレーションファイルが完成!!・・・と思う。
ちょっと気になるのは、640x480の画像を使ってGroovy GR-CAM030をキャリブレーションすると、principal pointのxが420くらいになる事。実際にずれているのか、それともパラメタの解釈か手順に問題があるのか・・・。
で、このキャリブレーションファイルを使ってARしてみた結果:
まあ特に何が変わったとも思えないけど心なしか自然になった気がする。ブラシーボ効果かもしれない。
0 件のコメント:
コメントを投稿