Little Planets with OpenCV | Nature | Photography | Music | Art

Nature | Photography | Music | Art

日々好奇心の趣くまま

サイト内の写真の使用ならびに無断転用を禁じます。

このところプログラムで空間を歪めまくっているので、余興でもう一つ作ってみました。

海外では"Little Planets"、国内では"惑星風パノラマ"とかいう名称で呼ばれている技法。

写真技法(というよりポストプロセス)的にはどちらかというと飛び道具の部類なのだが、なぜか国内・国外を問わず結構マニアが多く、個人的にも嫌いではない。

おそらく人間は球体をしたものを殊の外心地よく感じる本能があるのでは?

例えばこんな感じ。元の画像は



処理後(不連続部分の修正処理なし)



簡単に説明すると、直交座標のx,yをそれぞれ極座標のθ,rに変換してマッピングしたもの。

Photoshopで作るのが一般的なのだが、Photoshopだとパラメータ調整がなく自由が利かず作りづらいし、どうせなら詳細を自由に弄るため自前実装できないかと模索していました。

そこで見つけたのがこのサイト。

http://www.semifluid.com/2014/04/20/equirectangular-to-stereographic-projections-little-planets-in-matlab/

なんと、Matlabを使ってこの機能を実現していて、Matlab言語で書かれたソースコードも公開。パラメータ調整もできる。

そこでこれを参考にOpenCVバージョンを作ってみました。

https://github.com/delphinus1024/little_planets

例の如く詳しい使い方はreadmeを参照していただくとして、綺麗に作成できるコツなどを列記してみます。



  • 下が中心、上が周辺にマッピングされる。(-Fオプションで上下反転)上下の図柄の割合の加減が結果に大きく影響する。なるべく上下の図柄を均等にした方がよい結果になるみたい。


  • 横長の画像の方が出来栄えがよい。

  • 元画像の左右の末端同士を繋げることになるので、どうしても不連続部分ができてしまう。不連続部分はPhotoshopのコピースタンプやクローンなどをうまく使って修正する必要あり。末尾で公開しているのはいずれも修正後のもの。


  • 不連続部分は下に持ってくるとごまかしやすい。(オプションだとだいたい -W=2.4)


  • 一般的につまらないとされる左右にノッペリとした写真の方が綺麗に仕上がる。


  • 綺麗な球にするには元画像の水平をきちんと合わせる。


  • 中心部分の大きさはカメラ距離(Dオプション)で決まる。中心と周辺、どちらが主役かを考えて加減する。



以下がこのプログラムによる作例。













元画像は省略しますが、被写体次第でいずれも独特な世界観が出てくるように思います。

真摯にカメラをやられている方々からは怒られそうな技法ですが、絵画の世界でも長い歴史の中で異端から新しい表現が生まれたということも多々あるので、まあいいということにしておきましょう。