豪鬼メモ

一瞬千撃

手持ちSTFモードとHDRモード

手持ち撮影でもSTFモードを実現した。前回の記事で、一般的な中級クラスのデジカメにはついているであろうAEブラケット(露出ブラケット)の機能だけを使って撮影したデータに後処理をかけてSTFモードを再現することに成功した。今回は後処理プログラムを改良して、ブラケットの各画像で多少構図がずれた場合でも修正して、解像感の高い結果が得られるようにした。美しいボケの写真が手持ちで簡単に撮れる。


前回のおさらいだが、「Sモードで露出補正-1にして、F値が開放1段下になるようにSSを調整して1/3EVの7枚AEブラケット撮影」を行うと、開放絞り付近で絞りを7段階に変えた画像が得られる。その7枚の現像結果をこのプログラムにかけると、STFレンズで撮ったような画像が合成される。

合成する都合上、入力画像の被写体は完全に静止していることが望ましく、また撮影時にカメラも全くぶれないようにすることが望ましい。しかし、それはなかなか難しいことだ。上記の画像はゴリラポッドという簡易的な三脚に乗せて撮ったのだが、よく見ると各画像で数ピクセルのずれがあり、それが結果のマイクロコントラストを下げる結果になっている。つまり、ピントが合っているはずの部分も微妙にボケた感じになってしまっている。

これを解決すべく、入力画像間のずれを直してから合成を行うようにした。これなら、手持ちでもSTFモードの撮影ができる。合成プログラムを呼び出す際の引数に「--align」をつければOKだ。ずれの修正はHuginというパノラマ合成のプログラムのユーティリティを呼び出して行っているので、あらかじめそれをインストールしておくこと(「--align」をつけない場合にはHuginは不要)。入力画像は順不同なので、「image*.jpg」とかやって指定してもOK。

$ jkzr_combine --align --sigmoid 2 --slog 1 --sharp 1  merged.jpg \
  image001.jpg image002.jpg image003.jpg image004.jpg \
  image005.jpg image006.jpg image007.jpg

上に挙げた画像はずれを直してから合成すると以下のようになる。クリックして拡大して見比べてればわかるが、主要被写体であるライトの縁の解像感がかなり違う。三脚を使った画像でもずれ補正は有用だ。

画像のずれを直した状態の各入力ファイルをアニメにしてみた。位置がちゃんと合っているのがわかるだろう。絞りの違いによる描写の違いが如実にわかるのも面白い。
youtu.be

ずれ補正を経た合成機能をせっかく書いたので、ついでにHDR画像の生成もできるようにした。「--hdr」オプションをつけると、露出を合わせてから平均合成をするSTFモードではなく、HDR合成モードになる。HDR合成モードでは、入力画像の露出は合わせずに、enfuseというコマンドを呼び出して合成を行う。enfuseはenblendのサブプロジェクトなので、それをあらかじめインストールしておくこと(「--hdr」をつけない場合にはenblendは不要)。HDR合成の場合、入力画像は、Aモード(絞り優先オート)で絞りを固定して撮影すべきだ。また、適正露出を中心として、露出オーバーと露出アンダーの3枚(またはそれ以上)の画像を用意する。enfuseによる合成は、輝度0.5に頂点を持つガウス曲線で各ピクセルの寄与度を判定して加重平均合成を行う。これにより、ハイライト部分は露出アンダー画像の寄与度が大きくなり、シャドー部分は露出オーバー画像の寄与度が大きくなるので、ハイライトからシャドーまで適切な濃淡を描けるということになる。

$ jkzr_combine --align --hdr --sigmoid 2 --slog 1 --sharp 1 merged.jpg  \
  image001.jpg image002.jpg image003.jpg image004.jpg \
  image005.jpg image006.jpg image007.jpg

上に挙げたSTFモード用の入力画像を敢えてHDRモードで処理すると、ちょっと面白い描写になる。今回の撮影方法だと、明るい画像は絞りが開かれたボケの大きい画像になり、暗い画像は絞りが閉じたボケの小さい画像になる。暗い画像は-2EVまでの露出アンダーで撮っているので、明るい画像ほど輝度が0.5に近い傾向にある。それをHDR合成すると、絞りが開いた画像の寄与度が相対的に高まるので、STFモードの滲み効果を維持しつつも、より大きなボケが得られる。ボケが大きけりゃいいってもんじゃないが、わざわざSTFモードを使うのだからボケが大きい方が嬉しいことも多いだろう。

もう一つ例を出して比べてみよう。STFモード用の入力画像をHDRモードで処理すると、よりボケが大きくなる。STFモードとHDRモードの処理例を順に挙げる。拡大しないと分かりにくいかもしれないが、画面右端の皿の淵のボケが、HDRの例の方でより滲んでいるのが確認できるだろう。

後処理でボケ量を調整したいのであれば、enfuseを使う必然性はない。平均合成の際に加重平均を取ることにして、絞りが大きい画像の重みを強くすればボケが大きくなるし、絞りが小さい画像の重みを強くすればボケが小さくなる。そこで、「--grade」というオプションを用意した。「--grade 0.5」などとするとボケが小さくなり、「--grade 2.0」とかするとボケが大きくなる。重み0.5と重み2の結果を並べて表示しよう。設定の効き具合がわかるだろう。多くのケースではデフォルトである1のままが最善だと思うが、ボケをできるだけ大きくしたい場合には1.5とか2.0とかにするとよい。4とかにするとSTF効果が弱くなりすぎるので、大きくても2.0くらいがよさげだ(追記:追試により、2.0が最善という結論になった)。ということで、ボケの大きさを制御する目的では、「--grade」オプションを使うべきであり「--hdr」を使う必要はない。

ImageMagickの加重平均合成は2つの画像同士でしかできないので、実装にちょっと工夫が必要だった。まず、入力画像を明るさ(暗い順)でソートしておく。パラメータで指定された重みをWとし、入力画像の枚数をNすると、1枚目と2枚目の合成は1:W^(1/(N-1))の比率で行う。その合成結果と3枚目を合成する際には2:W^(2/(N-1))の比率にする。その合成結果と4枚目を合成する際には3:W^(3/(N-1))の比率にする。それを全ての入力画像で繰り返す。結果として、Wが1の場合には普通の平均合成と同じ結果になり、Wが大きいほど、明るい(ボケの大きい)画像が最終画像に大きく寄与することになる。7枚合成の場合、ボケの最外輪は6:1の比率で合成されるのがデフォルトだが、それをいくつにしたいか考えて設定するとよい。重み0.1から重み3.0までのスライドショー動画も作ってみた。ちょっとずつボケが大きくなる様子が観察できるだろう。
youtu.be

ずれ補正機能に話を戻そう。手持ちでもSTFモード用の写真が撮れるようになったのだ。前回紹介した手持ちでずれてしまった例が、「--align」をつけるとめっちゃ綺麗になる。適用前と適用後の結果を比べてみてほしい。ボケていたプルタブがシャッキリしている。視線誘導をする上ではマイクロコントラストって結構大事だ。

ずれ補正はHuginに付属してくるalign_image_stackというコマンドを使っているのだが、Macだと/Applications/Hugin/tools_macの下に入れられるので、jkzr_combineスクリプトではそこに暗黙的にパスを通している。Linuxの場合は/usr/binや/usr/local/binに入るので特に何もしなくて良い。Windowsの場合は明示的にパスを通す必要があるだろう。実装上の注意点としては、align_image_stackやenfuseの出力は無駄にアルファチャンネルをつけてくるので、後工程の不具合や非効率を防ぐためにはアルファチャンネルを削除した方がよい。また、EXIFタグが消されてしまうので、exiftoolなどで元ファイルからEXIFタグをコピーしてくる必要がある。Exiftoolがインストールされていれば、jkzr_combineスクリプトが暗黙的に呼んでEXIFをつけなおしてくれる。

ということで、晴れて手持ちでSTF写真が撮れるようになった。三脚はマジで面倒だったので、嬉しい。これで、梅だろうが桜だろうが水仙だろうが、風さえなければ、ジワッとしたSTF写真を取り放題である。そんな焦点距離のどんなレンズでもいけるし、シャッター速度優先で露出ブラケットができるどのカメラでもいける。さて、街に出て写真を撮ろう。特段ボケを生かした写真じゃなくても、さりげなくボケ味が良くなるので、とりあえずシャッター優先AEブラケットで撮るとよい。構図ぶれは後処理でなんとかなるし、動体ぶれした場合にはSTFを諦めて普通の写真として現像すればいいだけだ。















ちなみに、動体ぶれを起こした合成例はこんな感じになる。1枚目では、右側の歩行者が無想転生していたり、海の波がざわついた感じになっている。2枚目は背景の人物や一部の木の枝が高速振動したみたいになっている。3枚目は風ではためいた葉っぱがミツバチの羽ばたきみたいになっている。4枚目は揺れた紙垂が分身している。しかし、ぶれた場所以外は、手持ち撮影の合成結果なのにちゃんと明瞭な画像になっている。



屋外でAEブラケットをする際には、開放絞りだと明るすぎて最高SSが足りなくなることがあることに注意すべきだ。日中の日向でF2.0だと1/4000秒では撮れない。電子シャッターで1/16000秒とかが出せれば良いが、そうでない場合にはNDフィルタなりPLフィルタなりで減光できるように準備しておいた方がよいだろう。あと、花や草木を撮る場合には、風でぶれて失敗することが多い。風がある日はSTFは諦めた方がよい。

テーブルフォトなどで小物や料理などを撮るのにSTFモードはうってつけだ。被写体が近いとボケすぎるくらいボケるので、被写界深度が深くなることのメリットは大きい。それでいて、背景の大ボケも、主要被写体上の小ボケ微ボケも美しくなる。そこでの注意点は、前後ブレに気を付けることだ。上下左右のシフトと回転に関しては後処理で画像を動かすことで修正できるが、前後にぶれた場合にはどうしようもない。拡大縮小してから検査する最適化機能がHuginにはあるが、それでもピントがずれているのを直すことはできない。カメラの手ぶれ補正も前後方向には無力だ。よって、テーブルフォトでは、三脚を使うか、肘を前後にずらしてテーブルにつけるなどして、前後ブレを最小化するように努力すべきだ。




まとめ。シャッター速度優先(絞り駆動)のAEブラケット(露出ブラケット)の結果を合成して行う擬似STFモードが、後処理で構図ずれを直すことで、手持ちでも撮れるようになった。さらに、HDRアルゴリズムと併用できるようにもした。ボケの大きさを後処理で調整できるようにもなった。どんなカメラでもどんなレンズでもSTFで遊べる。どこかのメーカーさんが製品に実装してくれるまで、この機能の良さをアピールしていこう。