Loading...

Loading...

Scroll

Blog

Development and Information etc...

Categories

Tags

Monthly Archives

Keyword

Back

Ricoh THETA S Real Time Stitching

2015.12.11

Category

Tags

最近、RicohのTHETA Sを購入しました。

USB/HDMIでPCに繋いでライブストリーミングできるとのこと。要はPCに繋げたら外部カメラとして認識されるということですが、
「おお、リアルタイムで全天球映像が見れるのか!」と盛大な勘違いをしていました。
現実はそう甘くはなく、得られる画像は下のような感じ。それぞれのレンズで撮った映像が横並びになっている状態です。

これをなんとかリアルタイムに全天球映像にできないものかといろいろ調べた結果、カメラの映像をフラグメントシェーダで正距円筒図法 (equirectangular)に変換してあげれば、以前書いた記事と同じ手法で球の内側に貼り付ければ実現できそうということがわかりました。

上記のシェーダがつくれればWebGL (Three.js)でさくっとできそうと思ったので、今回はかねてから勉強しようと思っていたopenFrameworksで実装してみました。
なれない道具でわからないことをやるのはかなり骨が折れましたが、なんとか形になりました。

まずは魚眼レンズの映像を正距円筒図法にするところからですが、どうやら魚眼レンズにもいろいろ種類があるらしい。。

魚眼レンズ

wikipediaによると一般的な魚眼レンズは等距離射影方式とのことなので、
このへんの数式を使用してなんとなくシェーダはできたっぽいのですが、
なんかつなぎ目が全く合わない。。

おかしいなと思って調べていたら、THETAのレンズはステレオ投影 (立体射影)というものらしい。このページに書いてあった。

なので今度はこのへんの数式を使用して、シェーダを書き直したところ、THETAが内部でやってる処理のようにほぼつなぎ目がわからないとまでは言えませんが、なんとなくそれっぽいものができたっぽい気がしなくもありません (ふわふわ)。

というわけで、シェーダを通した結果、こんな感じのequirectangularの映像が得られます。

これを球の内側に貼り付ければリアルタイム全天球映像ビューアの出来上がりです。
openFrameworksを自由に使いこなせてないですが、マウスドラッグで向き変更、マウススクロールで球の大きさを変更できるようにしています。
また、アニメーションにイージングをつけるため、ofxTweenというアドオンも使用しています。
(服が違うのは、後日アップデートしたからです。)

2台のPCと2台のTHETA Sがあれば、全天球チャットとかできそう。

個人的にopenFrameworksは習得したい技術なので、これからもいろいろ作ってみたいと思います。あとunityも覚えたい。
webコンテンツの場合って、ブログに載せたいときはURLを貼り付ければおしまいだけど、ブラウザで見れないものを楽しげに見せるのってめんどくさいんだな。。
とりあえず、QuickTimeを使って画面録画をする方法は覚えました。

Related Posts

Top

My new portfolio site has been launched!

If you want to see the recent works please visit the new site.

visit the new site( https://unshift.jp/ )

stay here