全天球画像に説明を加える
Repository: add_descriptions_to_theta360は 全天球カメラ(Richo Theta)で撮影した全天球画像に手を加えたあとにもとに戻す、という二つのスクリプトです。 伝統木造建築の図面化・模型化を行う講義にて、全天球カメラ(Richo Theta)で撮影した全天球画像を情報の補足のために使おうと思ったのですが:
- そのまま撮って出しもなんか味気ない
- Thetaで撮影した全天球画像は普通に画像ファイルとして開くこともできるが、極付近が伸びている[^1]ので、映像内の対象に説明を加えたり、線で囲ったりする際にちょっと不便
ということで、全天球画像をキューブ状の画像に展開するconvert_e2c.pyと、編集したキューブ状の画像を元の全天球画像に戻すconvet_c2e.pyを作ってみました。変換についてはOpenCVのRamapを使うとできるのですが、ここでは(正距円筒図法の)全天球画像とキューブ画像の行き来を含む諸々の変換が整理されている py360convertをお借りしています。
[^1]球な画像が正距円筒図法(equirectangular)で表されたもの
convert_e2c.py
Equirectangular image to Cubed imageを行います。ほとんど py360convertの処理の呼び出し部分です。キューブ画像を編集しようとすると気づくのですが、説明を加えたい対象がキューブの一つの面に含まれていたほうが便利ですね。このスクリプトではこのような調整は作っていないのでそのうち改良するかもしれません。
convert_c2e.py
Cubed image to Equirectangular imageを行います。変換そのものは上と同じくpy360convert](https://github.com/sunset1995/py360convert)を使っています。
それ以外のスクリプトは、Google Photoなどのビューワに「全天球画像です」と認識させるために情報を埋め込む処理になります。全天球イラストを“360度画像”と識別させるJPEGセグメント(APP1-XMP)の埋め込み方に整理されているのですが、Photo Sphere XMPというセグメント(スクリプト内ではphoto_sphere_app_segとしています)をExifと同じようなイメージで埋め込む必要があるようです。このセグメントは画像処理ソフトウェアで編集すると失われるようですので、このスクリプトでは元の全天球画像からこのセグメントを複製し、出力ファイルに埋め込んでいます(ついでにExifも同様に複製・埋込を行っています)。なお、全天球イラストを~では、このセグメントに含まれる設定を調整などもう少し凝った埋め込み方が紹介されています。
出力された画像をGoogle Photoにアップロードすると若干歪みがあるものの、それらしく説明が追加できているのが確認できると思います。全天球画像のままこの手の説明を加えてもよいのですが、キューブ化したほうが直線がちゃんと直線になる(ただしキューブのエッジでは折れる)ので便利でした(のはず)。
関連
-
(正距円筒図法の)全天球画像とキューブ画像の行き来を含む諸々の変換 https://github.com/sunset1995/py360convert
-
下記のサイトですともう少し凝った全天球のセグメントを埋め込む方法が紹介されています。 https://qiita.com/mana_544/items/3245ce87f0a0fca80c2a
-
Jpegのファイルの中身に関する情報(↑のサイトにて紹介されていました)。 https://hp.vector.co.jp/authors/VA032610/JPEGFormat/StructureOfJPEG.htm