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

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

Bチャンネル再建法 追加補正サポート用マスク作成ツール

f:id:yasuo_ssi:20210310145522j:plain

 2021.4.3に、本ツールの使い勝手を大幅に高めた新バージョンを公表しました。こちらのページをご覧ください。


 このサイトで公開している不均等黄変写真のBチャンネル再建法補正マニュアルの中に、Bチャンネル補正法で一通り補正しただけでは不十分で、追加補正が必要なケースがあると記しています。一つは、Bチャンネル再建法でただ補正しただけでは黄色味が十分とり切れないケース (これは先日、2月1日にアップした写真がまさにこのケースです)、もう一つはこの補正法だとGとBのチャンネルの値が近づいてしまうので、もっと青い部分のチャンネルの値を離す必要がある場合です。前者の場合、画面の黄色味のある部分のB値を引き上げる、後者の場合、画面の青い部分のB値を引き上げる必要があります。

 青味の部分と黄色味の部分の補正量が同一であれば、グローバルに全体的にトーンカーブ補正等でBチャンネルの値を引き上げればよいのですが、どちらか一方だけ補正する、あるいは青みの部分と黄色味の部分で補正値が異なるという場合は、グローバルな補正は不適切です。

 そこで、マニュアルの中では、フォトレタッチソフトの色域指定機能を使って、その部分を個別に色補正するように書きました。

 もちろんそれで正解なのですが、色域指定機能を使うよりはパラメータを調整して補正マスクを作成し、それを掛けて色補正したほうがやりやすい場合もあるのではないかと考えました。そこで、ImageJ (Fiji Distribution) に対応した追加補正サポート用マスク作成ツールを作ってみました。

 

 このマスク作成ツールは、Bチャンネルの一定の明るさの範囲内のみで有効な黄色部分補正マスクもしくは青色部分補正マスクを作成するツールです。以前も、黄色、青色部分補正マスク作成ツールを公開しましたが、それらとの相違点は、さらに一定の明るさの範囲内に、マスク有効範囲を限定するようにした点です。

 この発想は darktable をいじってみたことで得ました。darktable の negadoctor は、ネガ反転画像のホワイトバランスを一カ所で決めるのではなく、シャドウ域とハイライト域の2カ所に分けて調整することで、RawTherapee のネガフィルム反転機能より良好なカラー調整を実現しています。また色の調整も、シャドウ域、ミッドトーン域、ハイライト域と明るさのゾーンを三段階に分けて調整するようになっています(これに関しては、よく考えたら、Photoshopもそうなっていました)。

 また、既に作成していた黄変補正マスクの問題点として、元の色の濃度 (明るさ) によって補正量が変わってしまう可能性がある欠点も認識していました。あくまでB値とG+R値の差に基づいてマスク画像を作ってはいますが、それでも、もともと色の濃度が濃い (暗い) ところでは補正量が少なく (マスク画像が暗く) 色の濃度が薄い (明るい) ところでは補正量が多く (マスク画像が明るく) なる傾向がありました。これは、彩度が高い部分は明るい部分が多い傾向があるためです。もちろん明るくても色が淡い場合もあり、明るいといって必ずしも彩度が高いとは限りません。とはいえ、暗い部分は、そもそも明度の値が低く、構造的にR, G, Bの値に差を作りにくいため彩度が低くなる傾向が出ます。

 これらの影響により、単純な黄色部分判定マスクでは、仮に黄変量が同一であっても、元々の明るさによって補正量が変わる傾向を排除しきれない (但し機械的に明るければ補正量が上がるわけではなく、おおむねそのような傾向にある) のです。

 これらを調整するために、一定の明るさのゾーンごとに黄変補正マスクを掛ける、という方針は合理的ではないかと思いました。というわけで作成してみました。

 ダウンロード先はこちらです。

 で、このツールの使い方を説明します。

1. 事前準備

 当然ながら ImageJ (Fiji ディストリビューション) をインストールしておいてください。そしてこのインストールフォルダ (Fiji.App) の下の Plugins フォルダにダウンロードしたプラグインを解凍し、コピーします。

2. 補正手順

2.1. 調整閾値パラメータ決定のためのプレビュー作業

・まず、ImageJを立ち上げ、追加補正したい、第1次補正済みのファイルを読み込みます。その際、読み込むべきファイルが16bit TIFFで、かつ圧縮がかかっている場合は、[File] → [Open] では読み込めません。[Plugins] → [Bio-formats] → [Bio-formats impoter] を使って読み込んでください。

・この時、画像が8bit以外だったら、[Image]→[Type]で[8bit]をチェックし、8bitグレースケール画像に転換します*1

・読み込んだら、[Image]→[Color]→[Split Channnels]を使って、画像を3色分解します。そして、不要なチャンネルの画像は閉じ、必要なBチャンネル画像のみ残します。

・次に、[Image]→[Color]→[Adjust]→[Threshold]を立ち上げます。そして、なるべく補正の対象としたい部分のみが黒くなるように上下の閾値を調整し、決まったらその調整値をメモしておきます。

f:id:yasuo_ssi:20210208113356j:plain

補正元画像 (Bチャンネル再建補正法適用済)

f:id:yasuo_ssi:20210208112835j:plain

電車の青色部分を対象として選択

f:id:yasuo_ssi:20210208112918j:plain

電車の窓周りのクリーム色部分を主対象として選択

f:id:yasuo_ssi:20210208112947j:plain

駅ビルの壁面の黄色味のある部分を主対象として選択


2.2. プラグインの実行

・ImageJの[Plugin]メニューから、先ほどインストールしたプラグインを起動します。メニューの下の方に表示されているはずです。

・起動したら、まず、補正対象となるファイルを指定します。

・次にパラメータ入力ダイアログが出ます。

f:id:yasuo_ssi:20210208104555j:plain

パラメータ入力ダイアログ

・[Image bit depth]は通常[Auto]のままで良いです。

・[Yellow Mask Threshold] はマスクの閾値を決めます。0だと、黄色いマスクの場合、少しでも黄色味のあるところを白抜きにするマスクを作ります((B+R/2)の値が、Bの値以上の部分を範囲とします)。これを10にすると、黄色くない部分も含め白抜きにする((B+R/2)+10 の値が、Bの値以上の部分を範囲とします)と同時に、調整すべき部分のマスクの透明度も上がり(マスクがより明るくなり)ます。通常、10-20ぐらいが適正かと思いますが、出来たマスクを見て適宜調整してください。

・[Mask Invert for Blue Mask] は、作成するマスクの種類を決めます。デフォルトは黄色い部分を補正するマスクです。黄色味のある部分の黄色味を減らすマスクなら、チェックは外したままにします。青い部分の青みをさらに増すためのマスクなら、チェックをつけます。

・[Base Channnel for L Zone] は、どのチャンネルをベースに明るさの領域を決めるかを指定するパラメータです。通常 Blueで良いと思いますが、Grayscaleや、Red, Greenチャンネルを選ぶこともできます。ここで違うチャンネルを選ぶなら、先ほどのプレビューもBlue以外のチャンネルでプレビューを行ってください。

・[Lowest Threshold of L Zone], [Highest Threshold of L Zone]は、マスクを適用する明るさの範囲を決めるパラメータです。先ほどプレビューで決定した閾値の下限値と上限値を入力します。

・[Show working windows?]はお好みで。ただ、デフォルトのYes にしておくと、トラブルで止まった時にすぐ分かります。

・OKを押すと、プラグインが実行されます。

2.3. 作成されるファイル

・実行が終わると、元画像と同じフォルダに以下の3種類のファイルができます。originalfilename のところには元画像のファイル名が入ります。

originalfilename_Mask_Thr_Y+z_x4.tif

 閾値 +z の黄色補正マスク (青色補正マスクの場合はYがBになる)

originalfilename_L_Zonex-y_Mask.tif

 Bチャンネルの明るさの閾値が x から y の範囲の明るさゾーンマスク

originalfilename_L_Zonex-y_Y+z_Mask_Binded.tif

 上の2つの画像を合成して作成した、有効範囲がBチャンネルの明るさの閾値が x から y に限定された、閾値 +z の黄色補正マスク (青色補正マスクの場合はYがBになる)

・以下、電車の青い色部分を主対象としたマスクの事例を掲示します。

f:id:yasuo_ssi:20210208114404j:plain

閾値 +15 の黄色補正マスク

f:id:yasuo_ssi:20210208114442j:plain

Bチャンネルの明るさの閾値が 65 から 96 の範囲の明るさゾーンマスク
(プレビューで見たのとは白黒逆転しているのに注意!)

f:id:yasuo_ssi:20210208114629j:plain

 上の2つの画像を合成して作成した、有効範囲がBチャンネルの明るさの閾値が 65 から 96 に限定された、閾値 +15 の黄色補正マスク素材画像

・なお、[Lowest Threshold of L Zone], [Highest Threshold of L Zone]の設定値によって、画像の全範囲が指定されると、プラグインは次のようなエラーメッセージを出力して終了します。

 "Selected ROI (Region of Interest) is missing."

 この場合、上の一番最初のファイルのみ作成して終了します。

2.4 補正へのマスクとしての適用

プラグインを実行して出来たマスク原稿用の画像ファイルを、さらに必要のないところを塗りつぶして、実際の補正マスクとしてレイヤー編集をサポートしたフォトレタッチソフト(GIMP, Photoshop等)に取り込みます。

・次の図は、上の画像を加工して電車の青色部分のみ補正するマスクとした事例です。

 

f:id:yasuo_ssi:20210208120148j:plain

上のマスク素材画像を加工した電車青色部分補正マスク

・また、壁面補正マスクの作成例も提示します。

f:id:yasuo_ssi:20210208120944j:plain

有効範囲がBチャンネルの明るさの閾値が 82 から 117 に限定された、
閾値 +20 の黄色補正マスク素材画像

f:id:yasuo_ssi:20210208121006j:plain

上の画像を加工して作成した壁面黄色部分補正マスク

f:id:yasuo_ssi:20210208174823j:plain

GIMP上で補正レイヤー & マスクを使って補正中

3. 補足

 今までのImageJ用プラグインは、なるべくImageJをいじらなくて済むよう(つまり、改めてImageJの使い方を学習しなくても使えるよう)、プラグインの実行が終了すると自動的にImageJ自体も終了させていました。しかし、今回は、ImageJ自体をいじっていろいろプレビューしながら調整する必要がありますので、プラグインの実行が終了しても、ImageJは終了させないようにしています。

 本来はプラグインの実行の途中でプレビュー画面を見ながら双方向的な調整ができればベストなのですが、私のプログラミング力不足で、そこまでうまく持っていけませんでした。そのため、ImageJを起動したまま、いろいろ操作していただく形にしました。

 なお、本ツールで、画面の全領域を指定すれば、黄変部分補正マスク作成ツールおよび青色部分マスク作成ツールを兼ねることができます。

 最後に2021.2.1にアップした画像を、今回のプラグインを使って再調整した画像をお見せします。

f:id:yasuo_ssi:20210208174256j:plain

今回のプラグインを使って再調整した結果

f:id:yasuo_ssi:20210208144624j:plain

上の再調整画像をRawTherapeeに掛け、トーンカーブ補正 & フィルムシミュレーションに掛けて補正した最終結

 前回と今回では、Bチャンネル再建法を適用した画像を出発点としているのは同一です。前回は色域指定で3つの補正レイヤーを追加しましたが。今回は、電車の青色部分補正のレイヤーと壁面等の補正のレイヤーの2つを追加して補正しています。最後にRawTherapeeで仕上げているのも同じです。当然ながら、どちらかの方法が間違っているという訳ではないので、大きな差はありません。ただ色域指定だとアドホックな感じがありますが、こちらの方だと若干組織的に補正した感があるというところかと思います。どちらの方法を使うかは好みの問題かと。

 因みにそもそもBチャンネル再建補正に掛ける前の、オリジナルの黄変写真はこちらです。

f:id:yasuo_ssi:20201202095824j:plain

オリジナル

------------------

 2021.3.5に画像ファイルを簡単にレイヤーマスクとして貼り付けるGIMPプラグインを公表しました。このプラグインを使うと簡単に画像をマスクとして貼り付けられます。こちらをご覧ください。

------------------

 なお、本記事で紹介した写真補正技法やソフトウェア (Plug-in) は、個人的もしくは非営利用途であれば、自由に使っていただいて構いませんが、本技法を使って何らかの成果 (編集した写真等) を公表する場合は、本記事で紹介した技法を使った旨クレジットをつけて公表していただくことをお願いします。

 また、本ソフトウェアは現状のまま提供されるものし、作者はこれを使ったことによるいかなる損害補償等にも応じられないことを了解の上使っていただくものとします。
 但し、もしソフトウェアのバグがありましたら、ご連絡いただければなるべく改善するよう努めたいと思います。

*1:プレビュー作業で8bitに転換するのは、このプラグインのパラメータは8bitの数値 0~255 に基づいて与えるようになっているためです。また、ImageJのこのツール自体が基本8bitで動くようになっているので、16bit画像だと動きが不安定です。