2017-10-15

【技術系/Photoshop】大量の写真を省メモリに加算平均合成するJSXスクリプト

滝や夜景の超スローシャッター撮影やノイズリダクション的な用途で使える加算平均合成を効率化するスクリプト。

【前説】

Lr+Psで普通に加算平均合成を実行する場合、多分一番メジャーなのは次の手順でしょう。

  1. Lrで1枚の写真を補正
  2. 補正内容を、同じ内容が写った複数の写真に同期
  3. 合成したいRAWを複数選択して「Photoshopでレイヤーとして開く」(かなり遅い処理)
  4. Psが起動するので全レイヤーを選択して「スマートオブジェクトに変換」(これも遅い処理)
  5. [レイヤー]-[スマートオブジェクト]-[画像のスタック]-[平均値]実行(これも遅い処理)

ただこの方法は合成対象画像を全部一気に開くため大量コンポジットに向きません。またRAWをPsで読み込む手順3、スマートオブジェクト化する手順4、平均を計算する手順5のすべての操作がいちいち遅いため、ちょっと手作業をしたら休憩、処理が終わってたら次とダラダラした作業が必須になります。

【解決方法】

スマートオブジェクトの平均と近い結果を得る方法としてレイヤーの不透明度を変更する方法があります。
例えば4レイヤーの加算平均だと下層から順に不透明度を100%, 75%, 50%, 25%とすることで加算平均合成になります。
不透明度方式の場合、レイヤー1を100%、レイヤー2を75%としてそこでレイヤーを統合し、その後でレイヤー3を読み込んで50%としても同じ結果になるはず。この手順をスクリプトで自動的にやらせてしまえばメモリはRAW2枚分で済み、一連の処理を全自動で出来ます。

【スクリプトの説明】

処理の流れは次のとおり。

  1. 画像を1枚レイヤーとして取り込む
  2. 取り込んだレイヤーの不透明度を(100 - (100 ÷ 全入力画像数 × n))パーセントに設定(nは何枚目の画像かを示す値)
  3. レイヤーを統合
  4. 手順1に戻り次の画像を処理
1枚ずつ画像の不透明度を調整し、処理した画像は次々とマスター画像に統合されるため10枚処理しても100枚処理してもPsのメモリ使用量は一定です。

【使い方】

まずスクリプト本体はこちら:加算平均.jsx
  1. Lightroomで合成したい画像に基本補正を適用。Lrの操作はここまで。
  2. Psを起動し、[ファイル]-[スクリプト]-[参照]からダウンロードしたスクリプトを読み込む
  3. ファイル選択ダイアログが表示されるので合成したい複数の画像を選択(tiffやpsdではなく各社のrawを選択出来ます)
  4. 合成が始まります。2枚処理したところで進捗状況と残り時間(予想)がダイアログに表示されます。あと何分かかりそうか分かるわけですね~。

【注意事項①:XMPファイルが必要】

このスクリプトはLightroomの調整結果をRAWと同じフォルダにあるXMPファイルから読み取っています。
したがってPhotoshop上でLr調整を再現するには、XMPファイルが作成済でなければなりません。
Lightroomのカタログ設定で「変更点をXMPに自動的に書き込む」をONにしておくか、XMPの出力を手動で実行してください。XMPファイルがないとLr調整結果が反映されないまま合成されてしまいます。

【注意事項②:合成結果のクオリティ】

Psのレイヤー不透明度は小数点を含む値を設定することが、画面上ではできなくなっています(スクリプト上では設定できますが画面には整数値で表示されます)。
このため不透明度が小数点を含む条件(=合成対象画像の枚数が2枚, 4枚, 5枚, 10枚, 20枚, 25枚, 50枚, 100枚以外)だとPhotoshopが小数点以下を丸めて処理している可能性があり、結果的にスマートオブジェクト経由ほど正確な平均合成とはならない恐れがあります。

【注意事項③:三脚はがっちり】

Photoshopにはレイヤーの自動整列なる機能があって、合成ネタ画像が微妙にずれていても位置合わせを行うことができますが、このスクリプトで処理を行う場合は自動整列の助けを借りることはできません。
自動整列の結果は結構アバウトなもので手動で微調整してから合成しないと合成結果の画像がモヤっとなることが多々あります。
大量の画像を合成するのに一枚一枚を丁寧に位置合わせしていたら無理ですから、入力画像は非常に精密に三脚に固定されてることを前提としました。
強固な三脚を使い、いつもより強固にねじを締めてなるべく振動が少ない設定(ミラーアップとかサイレントシャッター)で撮影するのがいいと思います。

0 件のコメント:

コメントを投稿