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

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

ART 対数トーンマッピングの動作の基本原理

f:id:yasuo_ssi:20210904211415j:plain

 今回は対数トーンマッピングを使った、写真の露出、コントラスト調整の基礎に関する議論です。本ブログではすでに概略については機能紹介を行っておりますが、オンラインディスカッションでも良く分からないという声が出ています。

discuss.pixls.us そこでもう少し詳しくその動作を確認してみたいと思います。

 対数トーンマッピングは、darktable のフィルミックRGB をアレンジして ART に移植したモジュールです。このモジュールの基本的機能は シーン参照 (Raw) データ (センサーで得られたデータをデモザイクしてリニアRGB化したもの) を、最終出力につなげるディスプレイ参照データに割り付けるものです。但し ART の対数トーンマッピングモジュールでは、フィルミックRGB に含まれてたトーンカーブ調整機能は省かれ、ART では、トーンカーブの調整は、別途トーンカーブモジュールで調整するようになっています。

対数トーンマッピングのダイアログ

■動作の原理的説明

 まず、原理的な説明から。上に述べたように、[対数トーンマッピング] は、ハイライトとシャドウ部の割り付け (マッピング) を行います。デフォルトでは、シーン参照 (Raw) データの、EV 0 点がディスプレイデータの中間グレーポイント 18% に割り当てられ、それを基準にして+ EV と - Ev を動かして、マッピングの範囲をどの程度設定するかによりコントラストが決まります。いわば EV 0  / 18%中間グレー点が支点のような役割を果たします。なお、中間グレー点は、物理的には約 18% の明るさですが、人間の目には 50% (半分) の明るさに見える点です。

Raw (入力) データのディスプレイ (出力) データへのマッピング (割付)

 この時、ディスプレイ参照データのホワイトポイント (100%) に割り付ける シーン参照 (Raw) データの上端は、[白の相対的露出] で、ディスプレイ参照データのブラックポイントに割り付けるシーン参照データの下端は [黒の相対的] 露出で決定します。割りつける Raw データの +/- EV 範囲を狭めるとコントラストが強くなり、+/- EV の範囲を拡げると、より諧調は豊かになりますが、コントラストは低くなります。この範囲をはみ出た部分は、ディスプレイデータ上では、白潰れ、もしくは黒潰れになります。

 また、中間トーンの調整に関してですが、[増幅度 (Gain)] をいじると、入力する Raw データが明るくなったり暗くなるため、ディスプレイデータ上により明るく割ついたり、より暗く割ついたりを調整できます。例えば、+ 1 EV 上昇させると、入力データが 1 段明るくなってディスプレイデータに割付きます。具体的には、0 EV に ディスプレイの 18 % の明るさが割り当てられていたのが、元 0 EV の部分の明るさが 1 EV に増えますので、約 22 % の明るさが割り当てられるようになります。そして 18% には、 元 - 1 EV の部分の明るさが 0 EV に変わって割り当てられるようになります。また、+ 2 EV 上昇させると、 元 0 EV は、約 27 % に割り当てられ、元 - 2 EV に、18%グレーが割り当てられます。そのため、全体的に画面が明るくなります。下の図でいうならば、+ 2 EV 上昇させたということは、割り付けるシーン参照データが全体的に右に 2 EV 動いたということです。

 なお、通常、露出が適正な画像の場合は、デフォルト値のまま 0 EV を 18%に割り当てます。

増幅度を 2EV 上昇させた場合

 このように増幅度を上げて明るくすると、増幅前により低かった EV のデータで、ディスプレイの 100 % ホワイトポイントに到達 (飽和) してしまいます。ただし、入力 (Raw) データの方は増幅してもクリップされませんので、ハイライト圧縮をかければ入力データのハイライト部分の、ディスプレイデータ上での白潰れを避けることができます。また、増幅度を下げて暗くした場合、逆に増幅度変更前により高い EV の部分で ディスプレイデータ上での 0% ブラックポイントに到達してしまうのは同じです。

 なお、[増幅度] の代わりに [露出] モジュールで明るくしても、同じ効果が得られますが、画像処理パイプラインのより早い段階で調整が行われます。

 さらに、[基準とする中間グレー値] を動かした場合、次のようになります。例えば今デフォルト値の 0 EV が 18%グレーに割ついているとします。この時、中間グレー値を 15 % に変更すると、0 EV を、15% グレーに割りつけます。従って、画面は全体的に暗くなります。また 33% に変更すると 0 EV が、ディスプレイ参照データの 18% からより明るい 33% に割りつきます。従って、画面は全体的に明るくなります。

中間グレーを 33 % に変更した場合
(0 EV をより明るくなった中間グレーに割付ける)

 この時、もし、中間グレーの値を上げた場合は、ホワイトポイントの値は変わりませんが、入力データの最低値がディスプレイデータに割り当てられる値は上昇することがあります。逆に中間グレーの値を下げた場合は、ブラックポイントの値は変わりませんが、入力データの最高値のディスプレイに割り当てられる値が下がることがあります。

 仮に、増幅度をいじって、現在、いじる前の - 2 EV (いじった結果現在 0 EV になっている) に、 18%グレーが割ついているとすれば、[基準とする中間グレー値] を15% に動かせば 元 - 2 EV が 15% に、33% に動かせば 元 - 2EV が 33% に割りつく、ということになります。

 この辺りを確認するには、以下の記事に A. Griggio 氏が mid.tif というイメージデータを公開しているので、それが利用できます。

https://discuss.pixls.us/t/who-is-familiar-with-log-tone-mapping-in-art/41339/12

 このデータは Rec 2020 の色空間のリニアデータで、1EV ごとのグレーのグラデーションを描いています。増幅度を 1EV 上げたり下げたりするごとに、18%グレーの位置が、1EV ずつずれていくのが確認できます。

 なお注意しなければならないのは、白の相対露出値は、単純に入力データの割り付ける上限を決めるだけではなく、0 EV 以下のトーンの割り付け方にも影響を与えるという点です。それに対し黒の相対露出値は、0EV 以下、中間グレー以下の割り付け方には影響を与えますが、中間グレー以上の影響には影響を与えません。事実上、白の相対露出値はトーンマッピングのミッドグレーを中心とした割り付け幅を決定するようです。そして黒の相対露出値はそのシャドウ部に関して、その割り付け幅を若干修正するというような役割を果たしていると思われます。そのため、黒の相対露出値のデフォルトは -13.5EV とかなり低くなっていますが、実際に割り付けられる値は白の相対露出値の影響を受け、白の相対露出値の値が小さいと、割り付けられる下限は -13.5 EV よりも上がってしまいます。

白の相対露出と黒の相対露出の関係

 今の話を図示すると上のようになります。青い線で表されているのが、白の相対露出で決定される基本的なトーンマッピング範囲です。そして赤の線が、0 EV 以下の領域でマッピング範囲を微調整する黒の相対露出の効果です。おそらく、白の相対露出で決定されるマッピングの傾斜と黒の相対露出で調整できる傾斜の差に一定の限界があり、黒の相対露出で設定される値が非常に低くても傾斜の限界で頭打ちになるため、実際に設定されるマッピングの下限値は黒の相対露出での設定値より上がってしまうようです。従って黒の相対露出の設定値の実際の適用量は白の相対露出の設定値の影響を受けて決まる、ということになります。

 例えば白の相対露出のデフォルト値は 2.5 EV に対して黒の相対露出のデフォルトは -13.5 EV と非常に低くなっていますが (0 EV からの距離は大きくなっている)、白の相対露出の値が比較的小さいので、実際の割付の下限値は -13.5 EV まで行かず、-7 or -8 EV 程度に留まります。

 白の相対露出の値を十分大きくすると、割付の実際の下限値は黒の相対露出の設定どおり -13.5 になります。

 また、白の相対露出の値を非常に大きくすると、入力側の割付の下限値は黒の相対露出の設定どおりになりますが、入力側の割付下限値が、ディスプレイ出力側のブラックポイントに割りつくのではなく、5% とか 10% に割りついてしまいます。そうすると黒浮きの画像になってしまいます。

 いずれにせよ白の相対露出が基本的にトーンマッピング範囲を決定するパラメータであり、それに対し修飾的役割を果たすのが黒の相対露出値と言えます。

 なおトーンマッピングのカーブ設定に関しては、最初に述べたように、基本的にトーンカーブモジュールにて調整します。

 また対数トーンマッピングモジュールをオフにしている場合は、このモジュールのデフォルト値、つまり白の相対露出が 2.5 黒の相対露出が -13.5 がトーンマッピングに適用されるようです。