周波数分離、という古くからあるテクニックがあります。Frequency Separationで検索すると海外blogもたくさん出てきます。 Photoshopテク系だとだいたい「肌レタッチの必殺技」として紹介されていて、たまに有料コンテンツだったりするアレです。
2023/04/17) 周波数分離アクションや一緒に使うと便利なJSXを、説明書付きでまとめました。こちらからDLして使ってみてください。
https://d.pr/f/RhVlG0
「周波数分離」って?何がオイシイの?
画像の細かいトコ(高周波成分)と、変化のユルいトコ(低周波成分)に分けて、それぞれをレタッチできるよ!というテクニックです。
……なんのこっちゃ分からんですね。実体に合わせてもうちょっと分かりやすく言うと、
・画像から主にテクスチャを取り出したもの
・画像から色を取り出したもの
と考えると良いかと思います。というのも、この
・テクスチャ(模様、細かいトコ)
・色
に分けての操作は、他の修復ツールでも似たようなことやっていて、それらの発展形と捉えた方がこのテクニックを使いやすいからです。
「テクスチャ」と「色」は他のツールでどう扱われている?
コピースタンプと修復ブラシ(notスポット修復)の動作で見てみましょう。
画像の点線部分でサンプル(optionクリック)し、実線部分にペーストするとします。
コピースタンプツールは、サンプルしたものをそのままペーストします。「テクスチャ(模様)」も、色もそのまま。
修復ブラシは、「テクスチャ(模様)」はそのままペースト、色をペースト先と混ぜ合わせます。
オプションの「誤差拡散法」で混ぜ合わせ方が変わります。誤差拡散を大きくすればするほど急峻に元と周辺の色を混ぜます。
※ノイズが多かったり、細かな色のある画像では、誤差拡散が多いと変な模様が出て修復痕が目立ちます。初期設定では中間になっています。1くらいにしてやってみてください。だいぶ楽になるはず。
この二つのツールは、
・両方とも、「テクスチャ」部分は意図したものをペーストする
・修復ブラシは、「テクスチャ」はそのままに「色」を周りと馴染ませようとする
という違いが、ツールの特徴があります。
※使い分けるとものすごく楽に修復できます。
両方とも、「テクスチャ(模様)」はそのままコピペするんですね。
これらのツールの発展形として、「テクスチャ」と「色」をある程度分けられたら……?
それが周波数分離テクニックです。
どんなことができる?
このテクニックでは、
・「テクスチャ」部分を触っているときは(主に)テクスチャだけ考えればよい
・「色」に分けたレイヤーは細かなテクスチャが無いので、極端に言うとブラシでざっと塗っちゃっても大丈夫
という利点があります。
なので、こんなことができます。
飾りの一部を消したいとします。この位置、コピースタンプや修復では、周辺にサンプルできる箇所が少なくて結構面倒になりますよね。それが、こうじゃ。
分かれたレイヤーはこうなっているので、
色部分は細かいテクスチャ無視で塗れるし、テクスチャ部分は色を(だいたい)無視して肌や布地を離れた所からスタンプすればいいのです。便利でしょ。
どうやって作る?
使いやすいようにするにはいろいろ付け足すんですが、基本はこうです。
基本の分解方法は次のようにします。
① 背景画像(統合画像)を二つ複製
② 下の複製画像を「カラー」として、フィルタ>ノイズ>明るさの中間値をかける
※テクスチャ(模様)が無くなる程度。大きくぼかし過ぎると、テクスチャレイヤーに色が大量に持って行かれます。それを生かしても良いけど
「このあと、どうしたいのか」でぼかし量を決めてください。ここがキモです。
テクスチャレイヤーにほぼ全て持って行って、テクスチャレイヤーの操作で済ませたいときは多めにぼかす。例えば後れ毛(や、鼻毛w)を消したいとき。
カラーレイヤーでコピースタンプ等である程度のテクスチャも操作して、エッジはテクスチャレイヤーでしっかり出したいときはちょっと少なめにぼかす………など。
たくさん試して感覚を掴んでください。
③ 上のレイヤーを「テクスチャ」として、今ぼかしたカラーレイヤーと、元画像と同じテクスチャレイヤーとの差分を取ります。イメージ>画像操作で次のように設定。
注意点として、「レイヤー」で選択する対象レイヤーは必ず②で加工したレイヤーを選択すること。そうしないときちんと差分になりません。
④ 画像が灰色になったら成功。テクスチャレイヤーの描画モードを「リニアライト」にすると、元画像とほぼ同一の見た目になります。
使いやすくする!
このままでもいいんですが、もっとがっつり、しかも可逆でレタッチしたい場合はあまりにプリミティブ過ぎて使いづらいのと、コピースタンプ・修復ブラシ、ブラシツールでのoption(alt)クリックでのカラーサンプル等で、ツールオプションの次の項目
これを切り替えながら操作しなきゃいけないのでとっても面倒なんですよね。
この全レイヤーやサンプル対象レイヤーの設定は、初期設定の「オフ」「現在のレイヤー」だととても古くさいやり方の修復しかできないので(新規空レイヤー上での操作にならず、画像を直接いじることになる)、オンにしておいたり「現在のレイヤー以下」にしておくんですが、まぁ切り替えるのは面倒。
なので、もうちょっと使いやすいレイヤー構成にします。
アクション化したので、構成の例、叩き台として使ってみてください。以下からatnファイルをDL。
※2023/04/17 バージョンが新しくなりました。最上部に置いたリンクからDLしてください。
これを実行すると、次のようなレイヤー構成になります。
全てを収めているレイヤーグループは描画モードを「透過」から「通常」にしています。
「明るさ・コントラスト」は従来方式でコントラストを上げています(中心のカラーが変わらず、トーンカーブを直線状に動かしたのと同じ結果になる)。
表示してからカラーグループを非表示にすれば、見やすくなった状態でテスクチャ操作を、新規空レイヤー上で行えます。終わったら明るさ・コントラストは非表示&ColorGROUP表示に戻します。
カラー調整のほうは、テクスチャレイヤーがあっても「現在のレイヤー以下」でレタッチしていれば消さなくてもOKですが、TextureGROUPを消しておくと、塗りの精度が分かりやすくていいかもしれません。
これを叩き台にしていろいろ自分好みのものにしてみましょう。
弱点もあるよ
最初に「ツールの発展と捉えよう」と言ったのは、このテクニックは弱点が山盛りあるからです。
まず、
・統合画像を追加しているので、このレイヤー以下の調整が全て無駄になる(見えなくなる、再調整できなくなる)
これがデカい。
なので、レイヤーグループにまとめてレイヤーマスクを追加してあります。必要なところにだけ、効果をかけるようにすると少しは扱いやすくなるかも。
・完全にテクスチャと色に分かれるわけじゃない
というのも大きいですね。だから、テクスチャ分離テクニックじゃなくて「周波数分離」とか言うんですよコレ。
テクスチャレイヤー、帽子部分にいろんなカラーが抽出されています。カラーレイヤーで色替えしても、ここにカラーが残っているので仕上がりが妙な感じになったります。
そういうときは、TextureBASEに直にスポンジツールを使って彩度を下げたり、再編集可能なようにしたいときはTextureBASEをコピーしてそっちにスポンジ使ってみてください。
あ、あと!
・普通に修復ブラシやコピースタンプの方がきれい&速い場合の方が多い!
ってのもあります。上記ツールで普通に消せるものに周波数分離を使うと、テクスチャとカラー両方をケアしなければならず、単に二度手間になるだけです。
利用シーンいろいろ
服のシワをやわらげる…布テクスチャが抜けたカラーレイヤーを塗れば、シワの陰がやわらいで少し蒸気あてたようにできます。
レンガの模様をレイヤー移植して持ってきて、カラーレイヤーでざっくり塗る、とか。
あと鼻毛消すのにも便利。何かを消す、描く、にも便利ですね。
まぁ使い道は普通のツール同様いろいろあります。
肌補正のキラーテクみたいな扱いしていると、仕上がりが思ったようにいかなくてあっれぇ〜?と思うはず。そうじゃなくて、ツールの延長程度のテクニックだと思っていた方がいいですね。他の修復系ツールなどを使いこなせてはじめて、まともに使えるテクニックだと思います。
Scriptと組み合わせてもっと使いやすくする
スクリプトからアクションを実行させるようにすると、
- ヒストリーを1つだけにして、Cmd+Zで乗せる前にすぐ戻れるようにする
- 古いCOLORBASEレイヤーをリネームしてから実行し、複数の周波数分離グループを追加する際に確実に新しいCOLORBASEレイヤーが選択されているようにする→画像操作ダイアログでプルダウンしなくてよくなる
といろいろ便利。コードはこちら(コピペしまくったもの…)
グレーはヒストリーパネルに出る内容。
黄色部はアクション名/入っているグループ名です。
#target photoshop
/*
<javascriptresource>
<name>周波数分離</name>
<category>YPresets</category>
</javascriptresource>
*/
if(app.documents.length){
var myLayerName="COLORBASE"
app.activeDocument.suspendHistory("周波数分離",'code()');
}
function code() {
processArtLayers(activeDocument)
app.doAction ('Frequency Separation','ショートカット');
}
function processArtLayers(obj) {
for( var i = obj.artLayers.length-1; 0 <= i; i--) {processLayers(obj.artLayers[i])}
for( var i = obj.layerSets.length-1; 0 <= i; i--) {processArtLayers(obj.layerSets[i])}
}
function processLayers(layer) {
if (layer.name===myLayerName){
layer.name="COLORBASE_processed"
}
}