Nature | Photography | Music | Art -29ページ目

Nature | Photography | Music | Art

日々好奇心の趣くまま

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

前回書いたDFプログラムとほぼ同時進行で作成したもので、姉妹作となります。

静止画・動画問わず重要な要素である「ボケ」。 英語でもBokehという語が定着しているようで。

「美しいボケ」(以降「美ボケ」)について雄弁に語れるほど博識なわけではないのだが、おそらく「二線ボケがダメ」や「円形ボケが望ましい」とか「階調がなめらか」などの基本的な事柄以上は定量的な基準はあまりなく、ほぼ個人の主観に委ねられるというのが正解のようです。

その一方、巷では美ボケを撮るにはCarl Zeissだの大口径の単焦点レンズが必要とかなんとか…庶民にとっては道楽の極みのような高価レンズの世界があるようで。

しかしながら庶民ゆえにボケの追究のために膨大な¥をかけたくないが、ボケとは何ぞやという追究には興味がある。

その端緒として、OpenCVの機能を組み合わせてIn focusな画像から美ボケをエミュレートするプログラムを実装してみました。

https://github.com/delphinus1024/bokeh_emu

ただし現状では以下のような制限があります。


  • 被写体の距離に関係なく同サイズのボケ量になってしまう。本来は距離に応じてボケ量が増減しなければならないはず。そのためボケ特有の奥行き感があまり出ない。

  • 出力画像は元画像全体がボケる。実用上すべてボケの画像はほぼあり得ないので、ボケてない元画像を別レイヤーにおいてマスキングして組み合わせる必要あり。



今回、モチベーションの発端となり、かつ非常に参考になったのはこのあたりのサイト。

http://bit.ly/1KeZp8c

http://bit.ly/1Pqhe30

参考Webの主要点を要約すると、アルゴリズムで美ボケを作り出すキーポイントは、


  • ボケは元画像と別途与えられた2次元のkernel(つまり2次元フィルタの係数)との畳み込みで実現する。

  • ボケ形状はkernelの係数分布の形で決まってくる。(下品になるが、星型やハート型のボケなども可能。) また、大きいボケには大きいkernelが必要。

  • 重要な点として、本物のレンズで作り出されるボケは大雑把な流れとして、光(線形)-> ボケ(レンズ) -> センサ -> 現像時ガンマ補正(つまり非線形)のプロセスを経ている。実世界では光量に対して線形にボケる。

  • 一方我々が見る画像(つまりrawからtifやjpgに現像された画像、もしくは動画の各フレーム)は既にガンマ補正後の姿なので撮影時の光量とピクセル値の関係は非線形。 これは人間の光量に対する感覚が非線形であることに由来。 従って既に非線形である画像にボケを加えるには、処理前に逆ガンマ補正をかけて線形に戻してから処理しなければリアルなボケにならない。

  • そうすることで画像の明るい部分が重点的に畳み込まれることで本物に近いボケが得られる。

  • 処理後は再度ガンマ補正をかけて元の非線形に戻す。



RAW≒センサ出力と現像後画像の線形・非線形の関係については英文だが以下のAdobeの資料がとても分かりやすい。

http://adobe.ly/20YJIWC

プログラムのビルド・使用方法の詳細は付属のreadmeを参照してもらうとして、ここでは補足的なことを。


  • kernelファイルについて。幾つかの種類を添付しているが、これによってボケの形状が決まってくるので自作の形状を使ってもおもしろいかも。 (ただし多角形・丸以外はあまり上品な仕上がりにならないみたい。)

  • kernelの大きさによってボケの大きさが決まり、各サイズのkernelを用意するのも面倒なので、-r オプションでリサイズできるようにした。また、あまりくっきりした玉ボケが好ましくなければ-b オプションでkernel自体にブラーをかけることもできる。

  • -g オプションで元画像にかけるガンマ係数を指定できるが、この値次第でボケの質感を変えることができる。係数が大きくなるほど明るい部分のボケが増加し、暗い部分のボケが減少する。画像によってガンマ係数の調整が必要。



サンプルとして、元画像は先日仁淀川上流で撮影したもの。(以降、表示用に縮小してありますがいずれもFull HDサイズで処理したものです。)



いろいろなkernel及び設定値で生成したサンプルが以下。














キワモノっぽいものもありますが、一般的に「美ボケ」の範疇に入るものも幾つかあるのではないでしょうか。

後日追加

以下の作品の中で、このプログラムを隠し味に使用したカットがいくつか入っています。よろしければご覧ください。


久しぶりにテクニカルネタです。

遅蒔きながらようやく流行のgithubを使い出したので、その第一弾のお披露目も兼ねています。

https://github.com/delphinus1024

以前に公開したプログラムも時間を見つけては順次ここに移していこうかと考えています。

で、今回のテーマは以前から星撮影に関してカメラを始めた頃から悩んでいた事柄についてのソリューションを試行錯誤した結果でもあります。

時折写真やっている人から星景撮影について訊かれるのが、「ソフトフィルタ(=ディフュージョンフィルタ)使わないんですか?」というもの。

確かに、星景やってる人はほとんどディフュージョンフィルタ(以下DF)はデフォルトで使っているようで。

以下が、DFありとなしの写真を比較したもので、DFを付けると星の明るい部分がいい具合に拡散・誇張されて写真が華やかになる。

なし


あり


空が澄んでいるところで使うとそれはそれはファンタジー。



このDF、私も一時期は常用していたのですが以下の理由からあまり使わないようになりました。


  • DFを使うと星以外の風景までが不必要にぼやけてしまうのでなんだか好きになれない。

  • DFで拡散することは、画像の情報量を故意に劣化させることに他ならないので抵抗がある。

  • そもそもフィルターがつけられない(つけにくい)広角レンズが多い。



とはいえ、ディフュージョンフィルタの醸し出す華やかな絵は捨てがたい。

ハーフNDならぬハーフDFのようなものがあればいいのだが、どうやらそれは高価な特注品になるらしい。

そういうこともあり、このDFの効果を後処理で付けることができないかを試行錯誤していました。
これがうまく行けば、元画像と重ねて必要な領域だけマスクを付けてDF効果を出すことができる。

まず単純に思いつくのが、拡散という言葉から連想するガウシアンフィルタをかけるという技。

しかし以下の例のように、単純にガウシアンフィルタをかけるだけだと画像が満遍なくぼやけるだけで、DFの効果とはほど遠い。





このことより、DFの効果というのは単純に再現できないような非線形な現象であることが分かり、同時におそらくソリューションは写真・画像処理の世界ではなくCGの世界にありそうだと目星をつけた。

そこで思いつくのが、レイトレーシングを応用して拡散を表現できないかということ。

ググってみるとレイトレーシングの中でも上級技(たぶん)となるBRDF(双方向反射率分布関数)という質感をコントロールする小難しい方法論があって、この中で扱う反射を屈折に置き換えればフィルタによる拡散を表現できるかもと考えた。

そこで試しにオープンソースのレイトレーシングソフトでBRDFの実装を試みたのだが、愚直すぎる方法のため労力と計算時間ばかりかかってあまり綺麗な効果が出ない。
もうすこし試行錯誤すればうまくいったのかもしれないが…この方法は一旦中断して更に別の方法を探してみる。

どうやら「拡散」というキーワードに固執していたことがだめだったんじゃないかと考え、そこで思いついたのが拡散≒グロー効果かも…ということ。

グロー効果を綺麗に作る方法で検索すると理屈を懇切丁寧に説明してくれている記事を発見。しかも日本語で >多謝。

結局は最初に試したガウシアンフィルタが鍵だった。

詳細はリンクに譲るが、σパラメータを二乗で拡大しながら(要はぼかしを増やしながら)元画像にガウシアンフィルタをかけたレイヤーを作成していって、それらを指数的にゲイン(不透明度)を減衰させながら元画像に加算していくというもの。

これだと元画像の芯を残しながら、同時に拡散の要素をやんわり加えることができる。(ただし非常に計算時間がかかるという弱点があるが。)

そこでこのアルゴリズムをOpenCVを用いて実装してみました。もちろん本物のDFと比べればいろいろ相違点があります。

また、速度の最適化には時間を費やしていないので、画像サイズとパラメータによっては計算に数十秒もしくはそれ以上かかります。

https://github.com/delphinus1024/diff_filter_emu.git

詳細な使い方はgithubのreadmeを読んでもらうとして。(githubなので英語記述にしていますが)

こんな感じにDF効果を施した画像が生成されます。いずれも元画像はFull HDのサイズ。

before



after



パラメータを簡単に説明すると


  • n: 加算するレイヤーの枚数。大きくなると拡散範囲が大きくなるが、計算時間も大きくなる。

  • g: 処理前に元画像にかけるガンマ係数。大きいほど明るい部分が強調される。処理後この逆数で逆ガンマ補正をして戻す。

  • d: ゲイン(不透明度)の減衰係数。大きいほど急激に減衰する。

  • f: ゲインの初期値を調整。0なら初期ゲインは最大(完全な不透明)大きくなると初期ゲインが下がっていく。



パラメータを調整すると効果のかかり方が変化。

n=5 g=1.3 d=1.6 f=0



n=5 g=1.3 d=3.0 f=0



ここまで行くとやりすぎだが、ガンマ値を大きくすると明るい箇所が強調されすぎてこんなことも。

n=5 g=3 d=2 f=0



この方法のよいところはローパスフィルタ後の画像を加算していくのであまりノイズが増えないこと。

また、途中の計算はすべて浮動小数点を用いているので、下手に同じアルゴリズムをPhotoshopやAfterEffectsで実現するより綺麗に仕上がると思います。

パラメータを調整すれば星景だけじゃなくて、普通の写真でもグロー効果が出ます。

before



after



後日追加


以下の作品の中で、このプログラムを隠し味に使用したカットがいくつか入っています。よろしければご覧ください。


シミラン諸島からボートで北へ一晩、タイとミャンマーの国境にあるスリン諸島。




このもう少し北にはその筋で有名な海洋民族のモーケン族がまだ海上生活をしているそう。

かなり昔のNHK特集でミャンマー政府の方針で彼らの昔ながらの生活が難しくなっているように描かれていたが、今はうまくやっているのだろうか。

さて、ここもシミラン諸島同様の濃すぎる魚影が見られたが、かなりの激流でカメラをブレなく構えるのが大変でした。







更に今回遭遇した最大の生き物、巨大マンタも現れた。



過去に各地で何度も遭遇しているので冷静に…とはわかっていても、やはり登場してくれると夢中で撮ってしまう。



その他、撮影には失敗したが巨大ナポレオンやら人より巨大なバラクーダなど、大物にも遭遇。

今回のタイ・クルーズはこんな感じでしたが、感想としてはスケジュールに追われて一瞬で旅が終わった感じがするので、やはりもっともっと落ち着いて撮影できるだけの日数が欲しいところ。

とはいえ先立つ軍資金がなかなか…

以下は、蛇足ながら自身の水中撮影のスタイルについての独り言です。

スチル・動画を問わず水中撮影での(陸上でもそうだが)カメラと被写体の関係は大きく4つあって、

1.静止したカメラで静止した被写体
2.静止したカメラで動く被写体
3.動くカメラで静止した被写体
4.動くカメラで動く被写体

なぜか日本のダイバーは1が圧倒的に多いようで、海底で静止しているウミウシやその他の珍しい生き物をマクロで撮るスタイル。

しかしながら私はどちらかというと3と4のスタイルで撮ることが多いし、楽しいと思っています。特に群れや大型海洋生物が被写体の時。

自分が動きながら被写体を撮影するにはもちろん泳ぎながらの撮影になるので、フィンの微妙なコントロールをはじめ、被写体に逃げられないように適度の距離を保ちながら+太陽の方向を把握しながら+周りの障害物を認識しながら+カメラを安定させて構えるというマルチタスクをこなす必要があり、更にこれらの判断をリアルタイムで思考能力が極端に下がる水中で行わなければならない。

このあたりが撮影していて最もチャレンジングかつ面白いと感じています。



たまに白熱しすぎて海底に頭を激突させることもあったりしますが。。
ちょっとばかりファイル整理に時間がかかっているので、息抜きに中途半端なネタを。

以前からなんとか映像に収めたいと思っていながら難易度が高すぎて未だ成功していないものについて。

今までの経験で、夜の海の中ほど「異世界」を感じる場所はないと思っている。 もちろん昼間でも十分異世界なのだが。

昼間だと太陽光のお陰で天地の判別はつくのだが、暗黒だと視覚的な情報がシャットアウトされるので上下の感覚が希薄になってくる。

とりわけ明かりを消すと宇宙空間に無重力で浮いているような変な感覚に陥ってしまう。



そんな状況でとりわけ美しいと感じるのが、海中から見上げるゆらめく蒼い月。
夜の生き物を見るよりも、ずっと月を眺めている方が楽しかったりする。

今回も夜の海(しかも満月)に潜る機会があったので、ダメモトで撮影を試みてみました。
が…やはり失敗。



どうやったら美しく見たイメージの通りに撮ることができるのか…今後も機会がある度に試行錯誤するのみ。

通常、熱帯の海は熱対流による攪拌が起きないために透明度が高く美しい代わりに栄養分が乏しく、濃い魚影というのはあまり期待できないのが普通なのだが、アンダマンに限ってはその限りではないようです。

海底地形に由来する半閉鎖された海域に陸にある熱帯雨林からの養分が流れ込みプランクトンが大量に発生、それを基にした食物連鎖が圧倒的な魚影と大型生物を呼び寄せる要因となっているようです。(ガイドさんの受け売りです…)



帰国後改めてGoogleEarthのアンダマンの海底地形を見てみると、納得。



中央部の濃い部分は-2000m以上あるのに、周囲の部分は深くても-200m前後と大域的な水の移動が極端に制限される環境であることが分かる。
改めて陸と海とそれを取り巻く地形と気候という恣意的な要因によって生態系が築かれていることを再認識。



ここにいる多くの魚は警戒心が欠如しているようで、逃げる気配もなくむしろ近寄ってくる。
美ら海かどこかの水族館の大水槽の中で泳いでいるような気分になれます。