プロジェクションマッピングについて語る - キャリブレーション編 -
はじめまして、インタラクションディベロップメントグループのtsubokuraです。 私は元々、他の会社でWebのサーバーサイドエンジニアをやっていたのですが、個人的にインスタレーションやメディアアートといった分野が大好きで1-10designに入社する前からいくつか作品制作もしていました。 インスタレーションと言ってもその表現方法は様々ですが、その中でも私の現在のマイブームは「インタラクティブなプロジェクションマッピング」です。 今回は、tsubokura流のインタラクティブプロジェクションマッピングの制作方法を、社内で実験的に制作した「1-10COLORS」と共にご紹介致します。 まず、弊社のギャラリーとオフィスの間にあるガラス扉には「1-10design」のロゴが貼ってあるのですが、白文字で書かれたそのロゴを毎日見ていて、その上にプロジェクションマッピングで映像を投影できればギャラリーをもっと楽しく演出できるのではないかと思い付きました。 で、私が考えたのがこんなシステムです。
プロジェクターの位置に取り付けられたカメラで人の動きを検出して、それに合わせてロゴが光り、パーティクル(光の粒)が飛び出します。 これがあれば打ち合わせまでの待ち時間等がちょっと楽しくなるかもしれませんね。
制作にはopenFrameworksを使用しています。 openFrameworksはカメラ等の取り扱いも簡単で、C++ベースなので処理が高速なのが魅力です。 この作品では大きく分けて、
- キャリブレーション(投影映像及び当たり判定用カメラ映像)
- カメラ画像から人の動きを検出(openCVによる差分抽出)
- 人とロゴの当たり判定
- グラフィックス描画処理
などの処理を行っていますが、全部解説するとかなり長くなりそうなので、今回は私がインタラクティブプロジェクションマッピングの制作を行うにあたり一番苦労した「キャリブレーション」について解説したいと思います。
キャリブレーション(投影映像及び当たり判定用カメラ映像)
簡単に言うと、「プロジェクションマッピングを行うための下準備」なのですが、ここが一番地味で、なおかつ一番重要になる部分だと思います。 ただし、単純にプロジェクションマッピングを行うだけであれば、そこまで難しく考える必要はありません。 ■投影映像のキャリブレーション まず、プロジェクターの映像投影範囲が映像投影対象物の全体を覆うようにプロジェクターを設置します。 次に、実際の対象物を見ながらその位置に合わせて映像が出るように表示する動画にアフィン変換をかけたり、表示位置をキャリブレーションすればプロジェクションマッピングの完成です。
プロジェクタを向けた位置に対して、後から映像を重ねていくのでその場で対象物にお絵かきをするようなイメージですね。 この手法は、よくある投影場所に合わせて動画を作りこむタイプのプロジェクションマッピングとは異なり、投影場所が変わってもどこにでも対応出来る柔軟性が特徴です。 ■当たり判定用映像のキャリブレーション
ただのプロジェクションマッピングでは、投影映像のキャリブレーションだけで実現可能ですが、インタラクティブプロジェクションマッピングとなると、人の動きを取得する必要が出てきます。 今回はカメラを使って人の動きを取得するときのキャリブレーション方法を考えてみましょう。 上の画像が構成図ですが、ここで問題になってくるのが「映像投影範囲とカメラ撮影範囲の差異」です。 カメラで撮影した映像はopenFrameworks上で扱えるようになるので、人の位置や手の位置などの取得が出来るようになるのですが、どうしてもプロジェクターの投影範囲やカメラの視野角が違うので、上の図のように投影範囲と撮影範囲に差異が出てしまいます。 これでデジタル空間の座標と現実空間の座標がズレてしまうわけですね。 試しに、カメラで取得した映像をそのままプロジェクターから出力してみましょう。
投影された映像は投影対象物と映像のサイズが合わずひどい状態に…汗 この状態では人が投影対象に触れていてもデジタル空間では「触れられていない」と認識される事が出てしまいます。 この差異を補正するのが「当たり判定のキャリブレーション」です。
カメラでopenFrameworksに取り込んだ画像は左の図のように投影範囲が全て収まっていますが、この画像にアフィン変換をかけて、画像内のプロジェクター投影範囲が画面いっぱいになるように補正します。
この状態で再度カメラ映像を投影するとどうでしょう。実物と映像がきれいに重なっています。 これが、デジタル空間の座標と現実空間の座標がマッピング(対応付け)されている状態です。 カメラを使ったインタラクティブプロジェクションマッピングを行うには、まずこの状態を作るのが最も重要になります。 —– なんとなくご理解いただけたでしょうか。 キャリブレーションとは、現実空間とプロジェクターの投影空間、さらにはカメラの撮影空間を同じ位置・サイズに統一するプロジェクションマッピングを行う上で一番重要な作業になります。まさにマッピング作業ですよね。 キャリブレーション作業はなかなか難しく慣れていても時間がかかってしまうので、この作品ではマウス操作だけで簡単にキャリブレーション出来る機能を付けたり、何かの拍子にプログラムが終了してせっかく設定したキャリブレーションデータが消えないように一度キャリブレーションを行ったらその設定値をXMLで外部ファイルに保存して復元出来るようにしています。 また残念ながら、これを制作した時には社内に短焦点プロジェクタが無く、ロゴの全体をカバーすることが出来なかったので微妙な写真しか残っていませんでした…すみません(汗) ですがプロジェクションマッピングはアイディア次第で身の回りのものに演出やインタラクションを付け加えられたり、非日常を作り出せる本当に楽しい表現方法ですよね。 自由自在に使いこなせるようになりたいです。
dotFes2011 京都で展示した「はこみゅん」