PTAM

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);とでも書いて、一度実行してみれば、表示される。

PTAM01

ということで、動きました。

いまいち、最初のキャリブレーションのコツがわかりません。

僕が使っている、USBカメラは、マイクロソフトのVX-6000でして、これが71度もある広角レンズでして。それに、USBケーブルがつながっていて、手ぶれ補正も当然なくて、、、なんか微妙。

PTAM02
キャリブレーションが悪いからなのか、それともカメラの画質、というか解像度がどうのというよりも、ブラーがひどいので、とかその辺の理由か、今いち。。。

あぁ、VCがExpressなんで最適化がかかってないから余計に遅いのかな。まぁうちのPCもそんな、めちゃめちゃ速いってわけでもないしな。

PTAM03
まぁ動いたということで。。。

ちょっとソースコードでも読ませてもらおうかな。読書の秋だしね。

でも、PTAMのプロジェクト自体ってそんなにコードは長くないんだよね。逆に、長くないから速く動けるのかしらん? 

「PTAM」への2件のフィードバック

  1. こんにちは。
    読ませていただきました。
    私もPTAMを使ってみたのですが、デスクトップPCでは成功したのに、ノートPCではうまくいきませんでした。
    カメラのセッティングや映像の表示、平面の設定はできました。
    平面の設定後、網目状の平面は表示されるのですが、Draw ARを変更しても、目玉が表示されません。
    表示できるようにできますか?
    グラフィックが対応していないのでしょうか?
    ノートPCはdynabookのNXE/76HEです。

コメントを残す