省型旧型国電の残影を求めて

戦前型旧型国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

GIMPにおける疑似非破壊画像編集を考える

お断り:

 以下の記事は、決定版! 不均等黄変・褪色ネガ写真のデジタル補正術 (6-2)で論じた記述をさらに編集・加筆してまとめたものです。

1. GIMPにおける疑似非破壊画像編集法 概要*1

 GIMPPhotoshopを比較したときに、GIMPの写真画像編集操作上の最大の弱点は、Photoshopにある調整レイヤーという概念がなく、画像 (塗りつぶし) レイヤーしかない点です。この違いについては以前私が以下の記事を書きました。

 

blog.goo.ne.jp

 

 GIMPの将来のロードマップには、調整レイヤーを付け加える計画があるようですが、次のVer. 3.0 ではまだ実現できない予定です(予定では Ver. 3.2で実現とあります)。調整レイヤーという概念がないということは、非破壊編集ができないということです。Photoshopの場合、例えばトーンカーブ調整を行おうとすると、直ちに調整レイヤーが作成されます。この調整レイヤーには、あくまでもオリジナルの画像レイヤーをどう変換するかが定義されているだけで、オリジナルの画像レイヤーは変更されることがありません。ただオリジナルの画像レイヤーは変換を定義した調整レイヤーを掛けると、画像が変換されて表示されますので、どう変換されたかは目で確認できます。いくら編集してもオリジナルの画像はそのままですので、非破壊編集なのです。そして最後に画像の統合を掛けると初めてオリジナル画像が変更されて最終結果のファイルが得られます。

 ですが、GIMPトーンカーブをいじると、即時に画像そのものが変更されてしまいます。もちろん、失敗したなと思えば [元に戻す] 機能はありますので、[元に戻す] を何度も繰り返せばオリジナルに立ち戻ることは可能ですが、かなり面倒です。これが非破壊編集ができないということです。

 そこでどうしていくかというと、Photoshopに倣った疑似非破壊編集を考えようという訳です。GIMPの達人の方には、内容的には今更... という話かと思います。結局どうするのかというと、編集ステップごとにレイヤーを作っていくことになります。以下いくつかのケースに分けて考えます。

2. グローバル補正の場合(1) - 編集過程をそれぞれレイヤーとして保存する

 まず、編集範囲が画像全体にかかるグローバル補正について考えます。もっとも単純に考えますと、GIMPにおいて元の画像を維持しながら編集作業を進めるとすれば、元画像のあるレイヤーに直接補正効果を掛けるのではなく、元画像レイヤーを複製し、それに対して効果を掛けるようにすれば、元画像はずっと維持されます。編集に失敗すれば、編集したレイヤーを破棄し、また元画像レイヤーからレイヤーコピーを作り、それに対して再度編集を掛ければよいわけです。

 問題は複数の効果を掛けて編集を行う場合です。Photoshopの場合、補正Aの調整レイヤーと補正Bの調整レイヤーの両方がかかる範囲では、両方の補正効果が有効です(下図)。

f:id:yasuo_ssi:20210312084819j:plain

調整レイヤーあり

 しかし、GIMPの場合、あくまで補正をかけた(重ね)画像レイヤーなので、効果Aを掛けた編集済みAレイヤーと、効果Bを掛けた編集済みBレイヤーが存在する場合、標準モードでかつ不透明度100%の場合、両方の補正範囲が交差した部分は上にあるBレイヤーのみが表示されることになります。つまりそこでは補正Bしか有効でなくなるということです(下図)。しかもグローバル補正だと補正範囲が全面に及びますので、上に来た編集レイヤーBしか見えない、ということになります。

f:id:yasuo_ssi:20210312084909j:plain

調整レイヤーなし
(レイヤーモード: 標準 を前提)

 そこで、もっとも単純に考えますと、編集ステップごとに過程をレイヤーとして残しておけばよい、ということになります。つまりオリジナルレイヤーをコピーしそれに効果Aで補正を掛けます。次にそのレイヤーを再度コピーし、コピーしたレイヤーに対し追加で効果Bを掛けます。そしてそのレイヤーを再度コピーし... ということを繰り返していきます。これですと編集過程のファイルの容量は増えますが、失敗すればその前のレイヤーから始めればOKということになります。編集途上ファイルを恒久的に残す必要がないなら、編集ファイルのサイズが一時的に増えることは問題になりません。

f:id:yasuo_ssi:20210302114635j:plain

疑似非破壊編集1

 3. グローバル補正の場合(2) - レイヤーモードや不透明度を活用する

 もう一つの方法は、レイヤーモード (レイヤーを重ねて表示させる方法の指定) を活用するやり方です。標準モードでかつレイヤーの不透明度100%だと、下のレイヤーは上のレイヤーに隠れて見えません。しかし、レイヤーモード(レイヤーの重ね方)やレイヤーの透明度を変更することで、下のレイヤーと上のレイヤーの画像をいろいろな方法でブレンドすることができます。具体的には、オリジナル画像にそれぞれの効果を加えたレイヤーを作成した上で、レイヤーモード(レイヤーの重ね方)やレイヤーの透明度を変更することで、画像レイヤーを疑似調整レイヤー的に使います。

f:id:yasuo_ssi:20210302120618j:plain

疑似非破壊編集 2

 レイヤーの (重ね表示) モードの選択は、GIMPのレイヤーダイアログの[モード]から選択できます。また、そのすぐ下でレイヤー自体の不透明度も指定できます。不透明度を調整することで効果のかかり方を調整することができます。

f:id:yasuo_ssi:20210302121122j:plain

レイヤー重ね表示モードの選択

 それぞれのモードがどのような効果を持つかは、GIMP公式マニュアルの以下の説明をご覧ください。

docs.gimp.org これですと、必要に応じて効果をオン/オフして、その効果を検討することもできますし自由度が上がります。しかし Photoshopの調整レイヤーが効果の定義だけを記せるのに対し、こちらはあくまで元画像に効果を掛けた画像をどう重ねるか、ということですので、同じにはなりません。どちらの方がより補正がやりやすいかはケースバイケースで一概に言えません。

 

 なお、これらの編集において、編集過程ファイルを統合せずに維持したまま出力したいという場合があると思います(編集をし直す可能性がある場合など)。そのためには、以下のプラグインをお使いください。

yasuo-ssi.hatenablog.com

4. ローカル補正の場合

 グローバル補正が画面全体に補正を掛けるのに対し、ローカル補正は、部分的に補正を掛けることを指します。具体的にはマスクを掛けるなどして一部のみに補正を掛けるということになります。Photoshopの場合は、調整レイヤーに直接マスクを掛け、補正範囲を限定することができます。

 GIMPの場合は次のように行う必要があります。

1) オリジナル画像レイヤーの上に、それを複製したレイヤーを作成し、それに対して範囲指定を掛けたうえ、範囲外の画像を削除して透明化したり、マスクを掛けて不要な部分を透明化して部分補正レイヤーを作成する。もしくは、オリジナル画像レイヤーの上に、透明なレイヤーを新規作成し、さらにオリジナルレイヤー上で補正したい範囲を範囲指定して、それをコピーした画像を新規に作成したレイヤー上に貼り付ける。こうすることで、補正したい範囲のみが不透明で、それ以外の部分が透明な部分補正画像レイヤーができる。

2) 部分補正画像レイヤーに対し補正効果を掛けて補正する。

3) この部分補正レイヤーをオリジナルレイヤーの上に重ね合わせて表示することで補正した画像が得られる。

 いわば、アニメーションのセル画のような要領でローカル補正を掛けることになります。私が考案し、当サイトで紹介している Bチャンネル再建による不均等黄変写真補正法がこのような補正方法をフルに利用しています。

f:id:yasuo_ssi:20200729083631p:plain

疑似非破壊編集の基本的な考え方

  もちろんレイヤーモードを標準から別のものに変更して効果のかかり方を色々変えたり、レイヤーの透明度を変えて効果のかかる度合いを調整することもできます。

4.1. 色域選択を使った部分補正レイヤー作成の手順

 次に具体的に色域選択を使って補正範囲を指定し、そこから部分補正レイヤーを作る手順をローカル補正手順の例示として紹介します。色域選択以外の範囲選択を使う場合はその部分を適宜読み替えて下さい。

4.1.1. 色域選択を行う

 GIMPでは色域選択のアイコンは下図のようにツールボックスにあります。場合によるとこれがファジー選択のアイコンに置き換わっている可能性がありますので、その場合は、その2番目の図のようにアイコンを右クリック後、[ファジー選択]から[色域を選択]に切り替えてください。

f:id:yasuo_ssi:20200729095222j:plain

 [色域を選択]を選びますと、ツールボックスの下に以下のようなダイアログが出ます。

f:id:yasuo_ssi:20200729101413j:plain

 そこでまず必ず確認していただきたいのは、[見えている色で]にチェックが入っているかです。これにチェックが入っていることで、今選択されていないけれども、可視化されているレイヤーの情報で選択領域を選べます。これは非常に重要です。

 それから[モード:] の右横に4つのアイコンが並んでいます。一番左側がデフォルトの状態で、新たに選択範囲を選ぶモード、2番目が選択範囲を追加するモード、3番目が選択範囲を減らすモード(元の選択範囲から新たに選択した範囲を除外する)、4番目が元の選択範囲と新たに選択した範囲の交差領域を、選択範囲とするモードになります。

 また、[なめらかに] [境界をぼかす] チェックボックスは、使った方が良い場合と、使わない方が良い場合がありますのでケースバイケースで判断します。ただGIMPの場合、ファイルサイズが大きいと選択範囲の形が複雑であればあるほど加速度的に計算時間が長くなる傾向にあります。[なめらかに] [境界をぼかす]にチェックをつけておくと、計算時間を短くして操作をスムーズにする効果があると思います。

 しきい値は、どのていど選択の範囲の色の値に幅を持たせるかを決定します。値を大きくするほど広い範囲が選択でき、小さくするほど幅が狭まります。

 重要なのは判定基準です。Compositeはデフォルトで、色相や彩度、明度の組み合わせで色域を選択します。通常の選択基準モードといえます。Red, Green, Blue, Alpha (透明度)は、それぞれのチャンネルの値を基に選択領域を決定します。このRed, Green, Blue値で色域を選択することは、Photoshopの[特定色域の選択]と似たような機能だといえます(全く同じではありませんが)。HSV Hue, LCh Hueは色相です。簡単に言えばどの色の系統に属しているかで決定します。HSV, LChは色空間の違いですが、基本的な考え方は似ていますので、両者の差は微妙な差です*2HSV Saturation, LCh Chromaは彩度です。HSV Value, LCh Lightnessは明度になります。通常はCompositeですが、6.2.4で扱う最初のサンプルの場合は、色相を使っています。ときに各チャンネルの値で選択範囲を決めた方が良い場合もあると思います。

 

4.1.2. 色域選択範囲から部分補正レイヤーを作成する

 色域選択を使った部分補正レイヤー作成法には大きく分けて、引き算法と足し算法の二つの方法があると思います。まず引き算法から解説します。

〇引き算法

 簡単に言うと元の画像をコピーして、そこから補正に使わない部分を消して補正レイヤーを作る方法です。まずレイヤーダイアログを使って、補正元の背景レイヤーを複数複製しましょう。背景レイヤーを選択し右クリックしてメニューを表示させて[レイヤーの複製]を選んでください。これが部分補正レイヤーの元になります。万一、レイヤーダイアログが見当たらない場合は、メニュー → [ウィンドウ] → [ドッキング可能なダイアログ]で[レイヤー]を選んでください。そうするとレイヤーダイアログが表示されます。

f:id:yasuo_ssi:20200729131334j:plain

 次に、複製したレイヤーに透明化を可能にするために、すべてアルファチャンネルを追加します。やはりレイヤーを選択し右クリックしてメニューです。背景レイヤーには追加する必要はありません。それと、部分補正レイヤーの内容を確認するために、真っ白に塗りつぶしたレイヤーを1つ作っておくことをお勧めします。


f:id:yasuo_ssi:20200802195836j:plain

 次に補正レイヤー化する複製したレイヤーを表示(可視化) & 選択します。Photoshopと異なり、レイヤーを新たに可視化すると、同時に選択ポインタがそのレイヤーに移ってくれるわけではありませんので、可視化と選択を別々に明示的に行う必要があります。さらに、色域選択ツールを選び、[なめらかに] 、[境界をぼかす]、[判定基準]、[しきい値]を設定したら、選択したレイヤー上で 、選択したい色の場所をクリックします。選択した結果が思ったものとは異なる場合は、[しきい値]、[判定基準]を再調整してクリックしなおすか、追加選択モードにして選択範囲を追加するなどして範囲を調整します。なお、経験的には、選択基準に色相 (HSV Hue, LCh Hue) を使う場合はしきい値を小さめに、Compositeを使う場合は大きめにとったほうがいいようです。

f:id:yasuo_ssi:20200802195951j:plain

色域選択を行ったところ

 選択が終わりましたら、メニュー→[選択]→[選択範囲の反転]を選びます。選びましたらDeleteキーを押します。そうすると選択した特定色域だけが残って残りは透明化された部分補正レイヤーが出来上がります(アルファチャンネルの付加を忘れていると、削除部分は真っ黒になります)。

 ただ問題は、選択範囲を作ると点線で囲まれて点滅するのですが、これが非常に見にくいです。そのうえ点線も、範囲が複雑だと正確に表示されず大雑把になります。従って、正確にどの範囲が残っているのかわかりにくいです。ですので、特定色域だけを残した時点で、下に白色レイヤーを敷いて、どこが残っているかを正確に確認することが必要です。ダメな場合は編集を元に戻して、もう一回範囲選択からやり直します。あるいはこの段階で補正の必要ない部分を消しゴム、ペイントツールなどを用いて消す等、編集作業をするのも良いと思います。

 

f:id:yasuo_ssi:20200802144434j:plain

下に白レイヤーを敷いて作業中の部分補正レイヤーを表示させたところ

〇足し算法

 こちらは、元画像から[色域を選択]で補正に必要な範囲をコピーして、アルファチャンネルつきの新規レイヤーに貼り付ける方法です。まず、事前準備としてメニュー→[レイヤー]→[新しいレイヤーの追加]を使って、真っ白に塗りつぶしたレイヤーを作っておきましょう。これは部分補正レイヤーの範囲を確認するためのレイヤーです。

 それが終わりましたら、背景の変換元画像レイヤーを選択&表示させ、上と同様、色域選択を使って、部分補正レイヤーで使う色域を選択し、さらに Ctrl+Cで、クリップボードにコピーします。そうしたら、作成した白塗りつぶしレイヤーよりも上に、[新しいレイヤーの追加]で、もう1枚透明なレイヤーを追加します。これが部分補正レイヤーになります。

f:id:yasuo_ssi:20200730120116j:plain

新しいレイヤーの追加

 そしてクリップボードにコピーしておいた画像をCtrl+Vで貼り付けます。貼り付けると直ちに下図のように[フローティング選択範囲]という表示が出ますので、メニュー→[レイヤー]→[レイヤーの固定]を選択し、新しく作成したレイヤー(以下の例では「補正レイヤー」と命名)に貼り付け範囲を固定します。なお[フローティング選択範囲]という表示が出ていないときは、[レイヤー]メニューに[レイヤーの固定]項目が表示されることはありません。このあたりはPhotoshopだとあらかじめ新規レイヤーを作っておく必要はなく、貼り付ければ即新規レイヤーで貼りついてくれるので、Photoshopを知っている人にはまどろっこしいところです。

 

f:id:yasuo_ssi:20200802223039j:plain

 これで部分補正レイヤーができます。そして新規作成したレイヤーとその下の白レイヤーを可視化すると、上と同様、部分補正レイヤーの内容が分かりやすく明示されます。部分補正レイヤーの範囲を追加したいときは、さらに補正元画像に戻って範囲を拡張したい部分に色域選択&コピーを実施し、部分補正レイヤーに上書き貼り付けを行うと、その部分が部分補正レイヤーに追加されます。

 

 引き算法、足し算法のどちらでも部分補正レイヤーが作れます。

〇もっと簡単に選択範囲から部分補正レイヤーを作る

 ところで、引き算法、足し算法にしても上記のように結構手順が面倒です。もっと簡単に作れないものでしょうか。これについては、先日、「GIMPを便利に! プロジェクト」の一環として、選択範囲から簡単に部分補正レイヤーを作るプラグインを紹介しました。

 

yasuo-ssi.hatenablog.com

 上のリンク先のページをご覧になり、プラグインを指示に従って導入してください。

 このプラグインを入れ、オリジナルレイヤー上で、色域選択等の範囲指定をしたうえで、これを動作させますと、面倒な操作不要で、一発で、部分補正レイヤーができます。このプラグインを導入しますと、ほぼ Photoshopと同様の簡便な操作で、ローカル補正が可能になります。最初にプラグインを導入する手間はかかりますが、一度導入すればあとはらくらく編集が可能です。

 

■おまけ

 なお、写真の非破壊編集を行うレイヤー編集をサポートしたPhotoflowという、オープンソース・フリーウェアのフォトレタッチソフトが開発中です。但しWindowsでは32bit版しかなく、しかも大きな画像を読み込ませるとすぐ落ちてしまうなど、まだまだ開発初期段階のようですが、数年後は面白いことになっているかもしれません。

公式サイトは以下です。

aferrero2707.github.io

 

*1: 本記事はGIMPの最小限の基本操作法を理解されている方を対象にしております。GIMP自体全く初めて、あるいは写真編集自体全く初めてという方は、事前準備として、別の書籍やサイトをご覧いただき、基本操作についてご理解いただきますよう願い申し上げます。どちらかというとPhotoshopにはある程度慣れているけれども、GIMPにはまだ慣れていない、というような (かつての私のような) 方を想定した記述になっているかと思います。

*2:なお、HSVとLChの差は、HSVが狭い色空間で効率よく画像処理するために考えられた方式であり、LChは広い色空間に適合する方式のようです。以下のサイト参考。

ninedegreesbelow.com