Imaginary Code

from kougaku-navi.net

RICOH THETAで撮影した写真やライブ映像をProcessingで全天球表示する

 RICOH THETAは2013年の発売以来多くのユーザに親しまれ、バージョンアップを重ねて着実に進化を遂げてきました。2014年に発売されたRICOH THETA m15では動画撮影に対応し、そしてつい先日発売されたRICOH THETA Sでは念願のライブ映像出力(HDMI/USB)が搭載されました。ここではTHETAで撮影された写真・映像をProcessingで全天球表示する方法を紹介します。

RICOH THETA S 360度 全天球カメラ 910720

RICOH THETA S 360度 全天球カメラ 910720

パノラマ写真を全天球表示する

 THETAでは2個の超広角レンズで撮影された画像を繋ぎ合わせて1枚のパノラマ写真を作っています。この繋ぎ合わせの処理のことをスティッチと呼びます。こうして得られたパノラマ写真を全天球表示するには、3次元空間に球体のCGを作り、そこにテクスチャとして貼り付けます。これは地球儀のCGをテクスチャマッピングで作るのと同じ要領ですが、画像を球体の「内側」に貼りつけるという点に注意してください(結果的に表からも見えますが)。球体の中心に視点を置いて観察すれば、全天球シアターの出来上がりです。スティッチされた画像は全体をぐるっと見回しても継ぎ目がほとんどわかりません。

サンプルプログラム

  • PanoramaViewer (右端のDownload ZIPからダウンロードしてください)

 球体へのテクスチャマッピングをやるにあたり、Processing公式サイトのこちらのページを参考にしました。テクスチャを裏表反転させて貼りつけている以外は、ほぼここに載っているコードの流用です。

ライブ映像を全天球表示する

 THETA Sから新たに搭載されたライブ映像出力の機能ですが、残念ながらスティッチされていない画像(2個の円が並んだ画像)が出力されます。本来ならこれをスティッチで1枚のパノラマ画像にしてから球体にテクスチャマッピングするところですが、スティッチ処理には時間がかかるため、現状ではリアルタイムの処理は難しいです。
 そこで大胆なやり方ですが、左右の画像を直接球体に片面ずつ貼りつけることにします。ここでもテクスチャの裏表に注意が必要です。球体に画像を貼り付けた後は、先ほどと同様に視点を球体の中心に置けば全天球表示になります。この方法ではスティッチしていないため、境界で少々ズレが発生します。テクスチャを切り取る位置を調整することで多少良くなります。


サンプルプログラム

 これに関してはhecomiさんが先にUnityで実装されていたので参考にしました。境界のテクスチャを重ねてアルファブレンディングすることで、境界を目立たなくしていますね。Processingでやるのは若干めんどそうだけど、やろうかな。

おまけ:THETA S用の三脚

 THETA SではUSBケーブルまたはHDMIケーブルを挿した状態でライブ映像出力ができるわけですが、端子が三脚穴の横にある関係で三脚とぶつかってしまいます。なにかいい感じの三脚を作る必要があるのですが、いいものを見つけました。ダイソーで売っているスマホ用の三脚です。これの角をニッパーで削ると、ケーブルをいい感じに通すことができるようになります。もしネジをはめたときに端子がこの位置にぴったりこないときは、間に薄いゴムシートでも入れて間隔を調整したほうがいいかもしれません。