vita」タグアーカイブ

SURFとSolvePnPRansacで拡張現実

追記:バージョンアップ?しました

3連休,割りと暇だったので前からやってみたかったSURFを使ったナチュラルマーカARを試してみました.

マーカに使ったのは毎日プレイしているvitaの空き箱.
vita

結果はこんな感じ.緑色の丸はSURF特徴点.
img01 img02

プログラムはほぼOpenCVで書きました.
処理は以下のとおり.
1. マーカ,動画の両方のSURF特徴量を抽出
2. BruteForceMatcherでマッチング
3. マッチング結果の上位20個を使ってsolvePnPRansac
4. 得られた外部パラメータを使って立方体を描画

3番目のsolvePnPRansacが肝で,OpenCV2.4くらいから追加された機能なのですが,RANSACを使って外部パラメータの推定を行なってくれます.
古いsolvePnP関数だと,最小二乗誤差となる解を探すだけなのでエラーデータに弱かったりするのですが,solvePnPRansacならかなりロバストにパラメータを求めてくれます.
今回,マッチング情報が割りと不正確なのでRANSACを使わないとうまく推定できませんでした.

img03
半分くらいしか写ってなくても大丈夫

今回,これを試すためだけにわざわざwebカメラを買ったのでうまく動いてよかったです.
ただ,マーカが写っていなくても描画しているのでその辺の修正をしないといけないですね.
また今度OpenGLと組み合わせてもうちょっとリッチな画面にしてみようかと思います.

どうでもいいですけど,SURFって名前かっこいいですよね.
エースコンバット3を思い出しちゃいます.

追記 : ソースを整理したので公開(VS2010, OpenCV2.4.3)