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

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

Bチャンネル再建法ツール ハイブリッド・アルゴリズム実装版 Ver. 4.6《アルゴリズム一部変更 & UI改善》

f:id:yasuo_ssi:20210310145522j:plain

 ここのところ頻繁にバージョンアップを繰り返している、黄変ネガ写真補正用の Bチャンネルツールですが、やはりかなり大きなアルゴリズム変更を行ったこともあって、バグが取り切れていないのと、自分の中でまだコンセプトをまとめ切れていない部分があります。そのため、またまたバージョンアップをさせていただきます。

 今回の大きな機能面の改善は、実験的な新しいハイブリッドアルゴリズムの追加と、エキスパートモードメニューを中心とするユーザインターフェースの改善です。なお、今回アルゴリズムの改善まで踏み込んでいるので、Ver. 番号は、4.6 とします。

■画像状態オプションの追加

画像状態オプション

 今回、ノービスおよびエキスパートメニューの両方に画像状態オプション([Image condition])をつけました。画像状態は通常 ([Normal]) と荒れている([Coarse])のどちらかから選びます(デフォルトは通常)。

 「荒れている」を選ぶと、拡張疑似フラットフィールド補正アルゴリズムを実行するときのパラメータを変えますので、拡張疑似フラットフィールド補正アルゴリズムの効果が多少上がります。ただ、拡張疑似フラットフィールド補正アルゴリズムそれ自体、ぼやっとした変色を検出するためのアルゴリズムなので、エッジの明確な粗い粒状の黄変を完全に補正しきることはできない可能性はあります。

■ハイブリッドアルゴリズムの改訂版追加実装

 7月末に実装したハイブリッドアルゴリズムの仕組みは、従来のGチャンネルミキシング法アルゴリズムと拡張疑似フラットフィールド補正アルゴリズムをハイブリッド化したものでした。従って、黄変部分は拡張疑似フラットフィールド補正アルゴリズムによって削減されるだけではなく、Gチャンネルのミキシングによっても削減されていました。Ver. 4.54 でバグフィックスを行いましたが、そこで発見されたバグにより、一部の画像において拡張疑似フラットフィールド補正アルゴリズムがあまり働かないという現象が発生していました。それでもそれなりの補正ができていたのは、Gチャンネルのミキシングによる黄変の匡正効果が働いていたためです。

 ただ、GチャンネルをBチャンネルに混合することは、基本的に補正したBチャンネルをGチャンネルに近づけることになります。そこで、Type2マスク、つまり、Bチャンネル値がGチャンネルを上回る部分は、補正を弱めるマスクをつけて、出来る限りBチャンネルをGチャンネルに近づけないようにしていました。

 しかし、これには弱点もあり、Bチャンネルの褪色が進んでテクスチャ荒れがひどい場合は、補正を弱めた部分において、そのテクスチャ匡正効果も弱くなってしまいます。

 そこで、今回追加した実験的な新しいアルゴリズムでは、近景補正レイヤーにおいて、Gチャンネルの明度情報をなるべく拡張疑似フラットフィールド補正アルゴリズム適用後のBチャンナルに近づけてから、Bチャンネルにミックスするようにしました。つまり、Gチャンネルのテクスチャ情報のみ残して B チャンネルに混合することにより、Bチャンネルの値とGチャンネルの値の接近をなるべく起こさせないようにする、というものです。その代わり Type2 マスクの適用は行いません。これによって、テクスチャ匡正効果を全域において維持しようというものです。つまり黄変補正自体はほぼ拡張疑似フラットフィールド補正アルゴリズムに任されることになり、Gチャンネルの混合の機能は基本的にテクスチャの改善に限られることになります。

 但し、Gチャンネルの混入による色の補正効果を弱めることは必ずしも良いとは限りません。ですので、この新しいアルゴリズムモードは、実験的なオプションとして追加し、デフォルトは 7/28 に改善した従来のハイブリットアルゴリズムとしました

 なお、遠景補正レイヤーについては、既存のハイブリット補正と全く変わりません。単純に、拡張疑似フラットフィールド補正をかけたBチャンネルに対し、Gチャンネルを、ガンマ補正を掛けた上で混合しています。

 多分、Bチャンネルのテクスチャ荒れがさほどひどくない画像では、新アルゴリズムと従来のハイブリッドアルゴリズムの差はほとんどなく、むしろ従来アルゴリズムの方が好結果を収める可能性が高いものと思います。しかし、テクスチャ荒れが目立つ画像では、改善効果があると期待されます。

ノービスモードメニュー

 上図のように、[Apply hybrid correction?] というドロップダウン選択に、[New Method On] とい選択肢が加わっていますが、これを選ぶと、新アルゴリズムでファイルを作成します。ただの [On] ですと従来アルゴリズムです。

 

 できたファイルの違いですが、先日補正事例でお見せしたファイルで示します。まず従来のハイブリッドアルゴリズムを適用したBチャンネル補正画像(近景補正レイヤー)です (いずれもマスク適用前の素材ファイル状態+緑の保護オプション使用)。

既存ハイブリッドアルゴリズム

 実際にはこの画像にマスクが掛かったり、他のレイヤーの補正効果と合わせて編集しますので、これがそのままBチャンネルの補正画像になるわけではない、ということにご注意ください。

 次は新しいハイブリッドアルゴリズムを適用したBチャンネル補正画像(近景補正レイヤー)です 。

新ハイブリッドアルゴリズム

 見た目的には、あまり違いがないようですが、新ハイブリッドの方が、若干青い部分の明度値が上がっているようです。実際に新ハイブリッドアルゴリズム画像から既存アルゴリズム画像を減算してみると...

減算結果

 ご覧のように元画像の青い部分を中心に明るくなっています。つまり、その部分は、明るくなっている分、既存アルゴリズムに比べて、マスクを掛けなくても、G値とB値の接近が防止されています。従って、その点で、テクスチャの改善効果は新アルゴリズムの方が高いはずです。

 ちなみにオリジナルBチャンネル画像と、オリジナルファイルは下記の通りです。

オリジナル Bチャンネル

オリジナル

 オリジナル Bチャンネルは黄変部分は、ハイブリッドアルゴリズム適用画像よりも黒っぽいですが、青い部分は、どの補正ファイルより明るいことは間違いありません。一方、テクスチャの荒れはオリジナルより補正ファイルの方が明らかに改善されています。

 既存ハイブリッドだと青い部分は暗いですが、Type2 マスクを掛けることで、明るさはオリジナルBチャンネル画像に近く修正します(その部分はオリジナル画像を活かすので)。しかし、同時にその部分の画像の荒れも引き継ぐことになるので... ただ、既存ハイブリッドは拡張疑似フラットフィールド補正アルゴリズムの弱点をGチャンネルミキシングアルゴリズムで補っている部分があります。

 一方、新ハイブリッドだと、青い部分の明るさは、オリジナルより若干暗くなりますが (つまりGチャンネルの色情報を完全には除去しきれないためです)、アルゴリズムを変更してマスクを廃止したため(但し緑保全オプションを指定した時のみマスクがかかる)画像の荒れは引き継ぎません。しかし、当然ながら、拡張疑似フラットフィールド補正アルゴリズムの弱点をGチャンネルミキシングアルゴリズムによる色補正で補っているような画像では、当然うまくいきません。上の画像の場合、青いペイント部分に黄変が広がっていないので良いのですが、仮に広がっていれば、その部分はGチャンネルミキシングアルゴリズムに頼るので、ダメということです。

 率直に言ってサンプル画像程度の画像の荒れでは、新アルゴリズムを使うメリットはあまりなく、既存ハイブリッドアルゴリズムの方がより良い結果を得られる可能性が高いと思います。しかし褪色によって、Bチャンネルの荒れがもっとひどくなっている画像ではメリットが出てきます。

■ミキシングGチャンネルのデフォルトガンマ値の変更

 もともと遠景補正レイヤーのBチャンネルに G チャンネルをミキシングする際、1.45 のガンマを掛けてからミキシングしていました。それを8月に一旦 1.15 に引き下げましたが、再度この値を引き上げ、デフォルト値を1.56 にします。この値は、ユーザが変更することができます。

 ガンマを、1.15に引き下げたところ、元々遠景補正レイヤーだったのが、近景補正レイヤーよりも空が暗くなることが大半になってしまいました。これではますますこのレイヤーを設置する意味が良くわからなくなります。もともとこのレイヤーは空や遠景を担当させるつもりで設置していたレイヤーですので、これはちょっとまずいです。また、アルゴリズム変更後、遠景補正レイヤーの役割もあいまいになってしまいました。

 そこで、今後は基本的にはこのレイヤーは、Bチャンネルのハイライト域の補正を主に担当するという位置づけにするとともに、そもそもハイライト域では空など B チャンネルの値が G チャンネルより高いことが多いので、それに合わせて、再び混合するGチャンネルのガンマのデフォルト値を引き上げることにしました。

風景写真のヒストグラム

 また、ハイライト域でなくても、青い塗装部分が広く広がるような部分に使うことも考えています。これは、上で言及した新しいハイブリッドアルゴリズムは、もともと青い部分が広がっている画像の上に黄変が掛かっている画像ではうまくいかないので、その代替手段的な使い方です。

 例えば、その例ですが...

f:id:yasuo_ssi:20201109210402j:plain

補正前 オリジナル

 青い塗装部分にも広く黄変が広がってしまっていますが、この画像に対して、拡張疑似フラットフィールド補正アルゴリズムで黄変部分を推定すると、下記のようになってしまい、このアルゴリズム単独では、青い塗装部分の補正が全くできません。

推定黄変量

 ハイブリッドアルゴリズムでは、Gチャンネルミキシングアルゴリズムによって、拡張疑似フラットフィールド補正アルゴリズムができない補正を行ってくれますが、一方でGチャンネルの混合によって本来よりも青い部分が暗くなるという副作用が出ます。

近景補正レイヤー用 未編集素材ファイル

 しかし今回、遠景補正レイヤーのガンマ補正値を上げたので、遠景補正レイヤーとして次の画像が得られます。

遠景補正レイヤー用未編集ファイル

 これですと、青い塗装部分は、本来の明度に近くなります。しかし、デフォルトで遠景補正レイヤーには明るい部分のみを透過させる下記のようなマスクが付きますので...

遠景補正レイヤー用マスク画像デフォルト

デフォルトでかかるマスクが、ハイライト域のみにこのレイヤーの効果を適用するよう、フィルタリングしてしまい、このままでは、遠景補正レイヤーの青色の補正部分を編集後画像に反映させることができません。したがって遠景補正レイヤーの補正結果を青いペイント部分に反映させるためには、下記のようなマスク編集が必要となります。

遠景マスク編集後

 このあたりの補正手続きについては、補正結果も含め、補正事例として後日アップします([追記] こちらにアップしました)

 なお、今回、遠景レイヤーにミックスするGチャンネルのガンマ値を 1.56 に改訂しましたが、これは手持ちの画像を何枚かテストして、最低これだけは必要ではないかと経験的に定めたものです。画像によってはもっと明るくする必要があるようですので、その場合はGIMP上で、レベル補正を使ってもっと遠景補正レイヤーのガンマを上げてください。近景補正レイヤーにデフォルトマスクを掛けた結果の空の明るさに、遠景補正レイヤーの空の明るさを合わせるぐらいがちょうどよいように思います。

 このあたり、この説明だけでは理解が難しいと思いますので、後日アップする予定の補正過程事例をご参照ください。こちらの方法でテクスチャの荒れを極力抑えるのはちょっと面倒なところもあるので、上で紹介したNew Hybrid オプションをつけたわけですが、New Hybrid オプションは、こちらの事例のようなケースではうまく働きません。

■ユーザインターフェースの改善

 8月のバージョンアップで、ImageJのイベントリスナーを活用して、UIをインターアクティブにして利便性を高めました。今回、主としておざなりになっていた、エキスパートモードメニューを中心に、さらにユーザインターフェースの改善を図りました。

 まずノービスモードメニューでは...

トーン再現カーブでリニアを選ぶと、変更されたパラメータがブルーで表示されるようにしました。

TRCにリニアを選択

 また、ハイブリッド補正をオフにすると...

ハイブリッド補正オフ

 変更された、ミキシングするGチャンネルの変更されたガンマ値がピンクで表示されます。これらはエキスパートメニューでも同じです。

 さらにエキスパートメニュー独自のUI変更は...

 

拡張疑似フラットフィールド補正アルゴリズム不適用状態

 拡張疑似フラットフィールド補正アルゴリズムのみ使用、を選ばない状態では、関連パラメータは無効だよ、という意味でグレー表示にしています。これを適用に変えると...

拡張疑似フラットフィールド補正アルゴリズム適用状態

 有効になったパラメータがグリーンで表示されます。

 要は、通常はあまり使わないようなオプションを選んだ際に注意喚起をしたり、今この値を設定しても無効ですよ、ということを色で知らせるようにしました。これ以外にインターアクティブな動きも一部改善を加えています。

■黄変補正量調整パラメータの動きの変更

 拡張疑似フラットフィールド補正アルゴリズムのみの適用時、マニュアルで黄変補正量を調整できるようにしています。ただ今回のこのマニュアル時の補正量の適用の仕方を見直しました。

補正量のマニュアル補正

 調整値の基準点を、無調整状態にしていたのを、Auto調整した値に対してどれぐらいプラスにするのか、マイナスにするのかという適用の仕方に変えました。実は前回のバグフィクス時に、黄変量を計算する際に、予めBチャンネルとGチャンネルの明度レベルを調整することが、極めて決定的に重要な役割を果たしているということが分かったので、このマニュアル調整は自動調整した調整点からどのように調整するかという相対値として動作させるべきだと考えたためです。実際に調整結果をお見せします。

自動調整のみ

+ 100

 値を上げると、黄色味も減る一方で、全般的にBチャンネルの明るさも上がりますので、全般的に青っぽくなります。逆に、デフォルトで全般的に青っぽくなって、黄変が削減されすぎという場合は、マイナスの値を取ると、削減量が減り、全体が青っぽくなるのが改善されますが、一方値によっては黄変が取り切れない場合もあり得ます。

 ただこの問題は、以前補正事例でお見せしたように追加補正で補正するという方法もあります。

- 100 (黄変 無削減状態)

 なお、この値はいくら下げても、黄変無削減状態(=オリジナルBチャンネル)に戻るのが限界です。

■その他

 その他に、気付いたバグについて修正を施しています。必要最小限のバグ修正は Ver. 4.54 としてすでに公開しましたが... ただここのところ、コード改訂のトライ&エラーを繰り返しているので、新たなバグが発生しているかもしれません。

 また、いくつかのパラメータ等の見直しを行っています。従って、見た目でははっきり分からないかもしれませんが、前のバージョンより補正結果のクオリティは確実に上がっているはずです。

 新バージョンのダウンロードはこちらからお願いします。また既存のリンクも後で修正しておきます。

 なお、このツールはまだ開発途上で、アルゴリズムやインターフェース改良の実験を繰り返している状態ですので、また近いうちに改良バージョンを出すことになると思います。とりあえず、ある程度満足のいく補正結果を残せる状態でリリースしています。ただし、今回のリリースで、ダメージが中程度以下の画像に関しては、編集者のスキルにもよりますが、ツール自体の可能性としては補正可能な範囲のほぼ95~100%近い範囲までの補正が可能になったと思います。従って、この程度のダメージ画像の補正に対してはほぼ技術的に完成した段階に達していると考えています。残る課題としてはダメージ程度の高い画像をどこまで補正可能にできるか、また補正の手間をどこまで減らしたり、あるいは補正の手順をスムーズに分かりやすくできるか、というあたりだと考えています。

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

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

 また、このソフトウェアを利用される方は、このソフトウェアに起因する損害に対して作者は一切の責任を負わないという点を了承したものとみなします。同意できない方はご利用をお断りします。

 営利・営業目的で使用される方は別途ご相談下さい。

 また、私の作成したPlug-inも自由に改変して使用していただいて構いませんが、その成果を公表する場合はご一報下さい (公表しない場合は特に連絡は必要ありません)。またその改良した結果を私の方で自由に利用させていただくこともご了承下さい。