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

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

画像の減算, 乗算、マスクとの関係で陥りやすい錯覚に関するメモ(2) - GIMP

・マスクの明度=マスクを掛けたレイヤーの不透明度ではない

 さて、もう一つ気付いた錯覚は、GIMPのレイヤーマスクに関することです。今までレイヤーマスクの明度はそのまま、マスクを掛けたレイヤーの不透明度になるのかと思っていました。しかし、確かめてみたらそうではありません。

 一般にaという明度を持つレイヤーの上に、bという明度と、cという不透明度をもつレイヤーを重ねた時(但し明度、不透明度とも0.0~1.0の値を取るものとする)、合成された明度は、

(b x c) + c x (1 - c)

になるものとされています。しかし、ここでb 値を持つレイヤーに 明度 c のマスクを掛けると、その通りの値になりません。つまり、マスクの明度 c が そのままマスクを掛けたレイヤーの不透過度の値にならないのです。

 もっとも、マスクの明度が 1.0 だとレイヤーの不透明度も1.0に、またマスクの明度が0.0だとレイヤーの不透明度も0.0になるのは間違いありません。ただマスクの明度がその中間だと不透過度はおおむね明度を下回ることが分かりました。おそらくマスクの明度に、暗くなる方向に何らかのガンマを掛けた値が、実際の不透明度になるようです。

 さらに調べてみると、上に乗せるマスクのかかったレイヤーが下のレイヤーより明るいか、暗いかによって、同じ明度を持ったマスクでも、それを掛けたレイヤーの不透過度が変わってしまうことも分かりました。

 端的に言うと、マスクを掛ける上のレイヤーが下のレイヤーより暗いと不透過率が下がり、上のレイヤーがより明るいと不透過率が上がります。ただ、不透過率が上がったとしても、元の明度を下回る不透過率になります。

 またレイヤーモードには、デフォルトモードとレガシーモードがありますが、デフォルトモードの方がおおむね明るく、レガシーモードの方がおおむねやや暗くなりますが、上に述べた全体的な傾向は変わりません。

 ただ、具体的にどのような計算式になるのかネット上を色々調べたのですが、探すことができませんでした。少なくともGIMPのマニュアルには出ていません。GIMPソースコードを見ればよいのかもしれませんが、ちょっとGIMPソースコードを読みこなすほどの力がなくて... 

 GIMPをいじっていくつかデータを入れてみたところ、同じ明度のマスクを掛けていても、マスクを掛けている上のレイヤー、および下のレイヤーの明度によって、次のように不透明度が変化するようでした(以下、不透明度、明度とも%表示を前提)。以下の図はレイヤーの明度を固定した場合の、不透明率の変化の状況です。

同じ明度のマスクでもレイヤーの明度によって不透明度が変化する関係

 マスクを掛けているレイヤー(上レイヤー)の明度が高い(明るい)ほど不透明度が高まるとともに、下がる(暗い)と不透明度が下がる一方、下(背景)レイヤーの明度が低いと不透明度が上昇し、高いと不透明度が下がるようです。

 例えば明度50%のマスクの場合、上のレイヤーの明度が85、下のレイヤーの明度が0だと、不透明率は、42.4と、ほぼ不透明率も50%になります。ところが上のレイヤーの明度は85のままで、下のレイヤーの明度が100に上がると、合成結果の明度は96.9で、マスクを掛けたレイヤー自体の不透明率は20%相当に落ちてしまいます。一方同じ明度のマスクで、上のレイヤーの明度が35の場合、下のレイヤーが0だと結果は15.7で、これは不透明度は45%相当、一方下のレイヤーが100だと結果は91で不透明度は14%相当です。同じ明度50のマスクでもレイヤー自体の持つ明度によって不透明度は大きく変動します。この合成明度の変化は、下のレイヤーの明度変化による、先程の式の c x (1 - c) 部分の変化以上に変化していますので、明らかに下のレイヤーの明度自体が上のレイヤーの不透明度に影響を与えているのは間違いありません。

 あるいは、不透明度は、上下のレイヤーの明度差の値の関数になっているのかもしれませんが、ちょっとそこまでは分かりません。また不透明度の上限は、ほぼマスクの明度に一致するようです。

 これにさらに、マスクの明度自体がもつ係数があるようで、この係数は、いろいろ試したところ、どうやら、レガシーモードの場合はsRGB TRCデコードであり、デフォルトモードの場合はsRGB TRCの二重デコードのようです。結局、上レイヤーの明度、下レイヤーの明度、マスクの明度自体に3つ係数がかかっており、それらの複合が最終的なレイヤー不透明度や合成明度値を決めているようです。ただどういう意図をもってこのような複雑な変換を掛けているのかよく分かりません。上のレイヤーと下のレイヤーの明度差が少なければ、上に乗せた補正レイヤーの効果をなるべく落とし、大きければ効果を逓増するらしい、ぐらいは見て取れますが...

 ただ、完全にあらゆる状況を網羅してみた結果ではありませんので、間違っているかもしれません。ともあれマスクの明度=マスクの透明度=マスクを掛けたレイヤーの不透明度という単純なものではなく、かなり複雑な変換がある、ということです。

 なお、この話はPhotoshop にも当てはまるのかどうかは確認していません。

 実は今回の探求は、元々マスクを使ってレイヤー減算と同じことができないかということを考えて始めたのですが、マスクの明度は、マスクの透明度と同じではない、ということがわかって頓挫してしまいました。

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

(1)に戻ります。