360度パノラマカメラ

全方位カメラという、丸い鏡を使ってパノラマ撮影を行う機材に興味を持ったのだが、非常に高かった

なので、自分で作ってみた。目標としては、パノラマ撮影ができる機材を、できるだけ簡単に安く作ることである。

試作機1: 基礎的な検証

まず、実際に全方位画像を作れるかどうかを試してみた。

某研究室にあるちゃんとした全方位カメラを観察してみたところ、

    • 中央真上からカメラで撮影している
    • ミラーは三角錐か、半球の形(本当は双曲面だったらしい)

だった。このため、「真上から半球みたいな形をしたものを撮影すれば、それっぽい絵になる」と思い、料理用のボウルを手に入れることを考えた。

材料としては、夜のため主にダイソーで

    • 料理用ボウル(300円)
    • クリスマスツリーの飾りの丸くてキラキラしたやつ(100円)

を調達。立ち寄ったカフェでおもむろにiPhoneで上から撮影し、GIMPでボウル部分を切り出した後にプログラムを組んで、パノラマ画像にしてみた。後ろの人の頭が分裂したりして、ひどい絵になっている。

図1:ダイソーのボウルを用いた全方位撮影

使ったアルゴリズムに関しては、この時点で既に固まっている。まず、この2つの画像を見ていただきたい。ちなみに、画像は試作機2のものだ。

図2:全方位撮影(処理前)

図3:全方位撮影(処理後)

簡単に言えば、上の画像の台形の部分を下の画像の長方形の形に変換して、並べただけである。もともとOpenCV(フリーの画像処理ライブラリ)を使おうと考えていて、使えそうなサンプルコードを見ていたら、そのものズバリな全方位画像変換のサンプルが出てきたため、それを自分流にカスタマイズして、使っている。これを作った段階で、私はほぼ完全に三角関数などの詳しいことを忘れていたため、台形の座標を艶になるように順番に出していくのに少し苦労したが、それ以上のことはしていない。なお、見ればわかるように、360度ではなく355度くらいである。

ここで気になるのが、「半球だと、上下の反射がおかしくなってゆがんじゃうんじゃないの?」という点だ。これに関しては、ちゃんと写りそうな部分だけを変換している。もともと中央に近い部分は、反射がかなり急になるため、補正をかけても使えない。また、中央から少し離れたら、私の感触ではそんなにひどいゆがみはないようだ。ちなみに、より詳しい話では、球面ミラーの場合、中央付近でなければ歪みはほとんどないようだ。

試作機2: 映像の表示とMake: Tokyo Meeting 04での展示

さて、この全方位カメラをMake: Tokyo Meeting 04で展示しようと考えていたのだが、このボウルではあまりに示しがつかないのと、インタラクティブな展示にするために、以下の改良を加えた。

    • 東急ハンズの半球ミラー(恐らくここの、1200円)を導入
    • ウェブカメラからパソコンに直接入力して、映像として出力

半球ミラーの導入の効果は絶大で、多少ずれた位置で撮影しても破綻しない程度の絵を撮影できた。

図4:半球ミラー 導入後の新宿の夜景の撮影

Make1日目の最初には、画像ファイルを変換することしかできなかったが、怪しげな処理を加えて1時間ほどでリアルタイムに半球面映像を出力できるようになった。1日目はウェブカメラQCAM-200VをMacBook Proに接続して使っていたが、Macの場合

    • フォーカスが効かない(ソフトで実現)
    • なぜか200万画素程度の大きな映像が出た

という一長一短な仕様で、見られる程度の大きさの映像が出たものの、ぼけぼけでわかりにくかった。また、画像が大きいため、MacBook Proの性能では秒間4コマ程度しか出なかった。

図5:1日目の展示でのシステム。ウェブカメラを、フラスコ固定用の台にガムテープで固定し、上から半球ミラーを映している。左のデジカメは、このシステムに興味を持ってくださった方のもので、半球ミラーをアタッチメントにしてパノラマ撮影を楽しんでいるとのこと。

図6:疲れて寝る田島

2日目の展示では、DVカメラを用いた。三脚で圧倒的に安定度が高まり、全体の構成もシンプルになった。DVカメラは720x480ドットの解像度しか出ないため、全方位画像に展開したら縦が200ドット以下になってしまったため、拡大表示した。しかし、処理が軽くなって秒間30コマ程度出たのと、フォーカスがちゃんと合うようになったので、展示としてはより良いものになった。

図7:2日目の展示のシステム。DVカメラは画質は悪いものの、映像機器としてはやはりウェブカメラより優秀だった。

図8:2日目の展示画面。上の展開映像は拡大されている。

応用1:iPhoneアプリの作成

OpenCVがiPhoneでも使えるということで、iPhoneで撮影から処理まで全部できるようにした。処理には5秒程度かかったため、だいたい実用的に使えるという感じだ。これで、iPhoneと半球面ミラーを持ち歩けばどこでも撮影できる。ただし、位置合わせはやはり難しい。後からどこを変換するか指定するようなインタフェースを作りたい。

図9:iPhoneで処理した全方位画像(1)

図10:iPhoneで処理した全方位画像(2)

応用2:プロジェクターでの全方位投影

さて、パノラマをより簡単に処理できるようにするとともに、パノラマ以外の表示方法を考えてみたい。そこで目をつけたのが、ミラーを通して撮影した画像を、プロジェクターでミラーに投影したら、全方位の空間が写るんじゃないかというものだ。持っているポケットプロジェクターで実験してみたところ、以下のようになった。暗い場所での展示なら、いろいろなことができそうだ。リアルタイムでの中継などもやってみたい。

図11:実験に用いたシステム。ポケットプロジェクターで半球ミラーに図2の画像を投影し、近くに適当に丸く設置したA4の紙に投影した。

図12:投影結果。プロジェクターの性能から解像度が出ていないが、ちゃんと元の風景が再現されている。