PTAMのコードが公開されたので、試してみた。
PTAMとは、Parallel Tracking and Mappingです。
ってごちゃごちゃ説明してもしょうがないので、この動画を見てくれ。有名なやつね。
先日、このソースコードがダウンロードできるようになったので、試してみた。
マーカレスAR(PTAM)のソースコードを動かしてみた(WindowsXP VisualC++) | happymeme
と
工学ナビの中の人の研究と周辺 あのマーカレスARの研究がついにソース公開!
を参考にしました。
以下は、happymemeでのやり方を自分なりにアレンジしたもの。
環境は、Windows VistaとVisual C++ 2005 Express。
必要なものは、happymemeに書かれている「必要なもの」を全部。
IEEE1394のカメラは持ってないので、Webカメラで。その代り、工学ナビの中の人の研究と周辺で書かれている、PTAM_webcam.zipをゲット。同様に、ewclib12.lzhも必要。ewclib12.lzhは展開して、中身をPTAMのソースコードの中にコピー。
happymemeでは全部、{VC Root}やWindowsSystem32の下に放り込むようになってたけど、僕は、そのへんは汚したくなかったので、PTAMってフォルダを作って、PTAMIncludeとPTAMlibとPTAMbinにしてそこに放り込む。GLEWやらLapack and BLASやらのPTAM本体以外でもってきたコードは、全部一つのフォルダに放り込む。結構、となりのフォルダにそのヘッダがあるのを前提にプロジェクトのincludeの設定がしてあるので、注意。
happymemeでは、CVSを使って指定した日付のバージョンのTooNやらlibcvdやらgvars3を持ってくることになっているけど、僕の使ってるTortoiseCVSでは、やり方がよくわからんかったんで、思いついたまま、最新版をいただきます。
工学ナビの中の人の研究と周辺から頂いた、PTAM_webcam.zipを展開して中のREADMEに従って処理。
ここで注意。あのコードは、PCにUSBカメラが1個だけつながっていることを仮定して書かれている。僕の場合、チューナーカードが刺さっていたため、USBカメラが複数あって、カメラが認識されなくて頭を抱え込んだ。
VideoSource_Win32_EWCLIB.cc の 22行目、EWC_GetBufferSize(0)ってのと、36行目、EWC_GetImage(0, m_buffer)ってのの"0" ってのがカメラ番号なんで、自分の使いたいカメラに従って変更。自分の使いたいのがどれだかわからんかったら、ewclib.hの140行目あたりに、printf("displayname(%d):%sn",i,displayname);とでも書いて、一度実行してみれば、表示される。
ということで、動きました。
いまいち、最初のキャリブレーションのコツがわかりません。
僕が使っている、USBカメラは、マイクロソフトのVX-6000でして、これが71度もある広角レンズでして。それに、USBケーブルがつながっていて、手ぶれ補正も当然なくて、、、なんか微妙。
キャリブレーションが悪いからなのか、それともカメラの画質、というか解像度がどうのというよりも、ブラーがひどいので、とかその辺の理由か、今いち。。。
あぁ、VCがExpressなんで最適化がかかってないから余計に遅いのかな。まぁうちのPCもそんな、めちゃめちゃ速いってわけでもないしな。
ちょっとソースコードでも読ませてもらおうかな。読書の秋だしね。
でも、PTAMのプロジェクト自体ってそんなにコードは長くないんだよね。逆に、長くないから速く動けるのかしらん?
こんにちは。
読ませていただきました。
私もPTAMを使ってみたのですが、デスクトップPCでは成功したのに、ノートPCではうまくいきませんでした。
カメラのセッティングや映像の表示、平面の設定はできました。
平面の設定後、網目状の平面は表示されるのですが、Draw ARを変更しても、目玉が表示されません。
表示できるようにできますか?
グラフィックが対応していないのでしょうか?
ノートPCはdynabookのNXE/76HEです。
Open GL 1.5 に対応してるかどうかを確認するのがよろしいかと。