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

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

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

 当サイトで開発・公開している写真補正用ツールでは、画像計算をフル活用していますが、最近、陥りやすい錯覚に気づきました。

・画像全体の値を20%下げるのと20%ポイント下げるのでは異なる

 まず下にサンプル画像を示します。

オリジナル画像

 このオリジナル画像から一律明度値で51 (20%ポイント) 暗くした (減算した) 画像が下記になります(なお明度値は、以下すべて0-255スケール、8bit相当での値)。

オリジナルから20%ポイント (明度値で25.5 [0-255]) 減算

 この画像を作成するにはImageJのMath機能を使って引き算を実行します。もしくは、GIMP上で行うには、オリジナルレイヤーの上に20%の明度のレイヤーをのせ、さらにレイヤーモードをレガシーモードの減算にします(デフォルトモードの減算だと、20%の明度をさらにsRGBデコードした値で減算することになる)。

 これと同じことをGIMP(あるいはPhotoshop)の乗算モード(レガシー)で行うにはどうしたら良いでしょうか。すぐ思いつくのは、オリジナルの明度をその80%に下げる(20%下げる)濃度80%の画像を作って、乗算モードで合成すれば、というアイディアかと思います。そこでその画像を準備します。

明度80%(明度値で204)のレイヤー

 この画像をオリジナル画像のレイヤーに乗算モードで載せてみると...

 結果は以下のようになります。

オリジナルに80%の明度のレイヤーを乗算モード(レガシー)で載せたところ


 あら不思議。オリジナル画像から20%ポイント引いた画像と一致しません。乗算モードを使ったほうがずっと明るいです。なぜこんなことが起こってしまうのでしょうか。実濃度80%の画像を乗算しても、オリジナルの明度値によって、明度引き下げ効果が変わってしまうからです。

 考えてみましょう。例えば、明度が最大値、255のドットを考えます。これに透過率80%のマスクを掛けると 255 x 80%(0.8) で、204になります。減少値(暗くなった値)は、51で、確かに20%ポイント暗くなっています。ところが明度値128のドットでは80%のマスクを掛けると 128  x 80%(0.8) で、102.4です。減少値は25.4で、オリジナルが255だったドットに比べて半分しか暗くなっていません。128を基準に考えれば20%ポイント暗くなっていますが、255を基準に考えると10%ポイントしか暗くなっていない計算です。

 つまり、元のドットが暗くなればなるほど、明るさの減少値が減ってしまうため、一律20%ポイント値を引き下げた画像と、80%透過率のマスクを掛けた画像が一致せず、後者の方がより明るくなるのです。

 この関係を表にしたのが下記です。

表1 減少率80%のレイヤーを乗算モードで掛けた場合の明度の減少値

 逆に乗算モードを使って、一律減算と同じことをやろうとすると、一律の明るさの画像で乗算するのではなく、元の明るさに応じて明るさを変えた画像で乗算しなければなりません。その換算率は下記のようになります。

表2 乗算で減算と同じことをするときの調整値

 上の表の一番右側の真ん中の列をご覧ください。この低下%調整値が、この場合、乗算のために作るべき画像の調整値になります。つまり元の明度が130なら、255に比べ、1.96倍暗くしないといけない、ということです。

 この調整値は、元の画像の明度を0.0-1.0に標準化したものの逆数に一致します。つまり 調整値=1 / 標準化明度 または、 = 1/ (明度/明度最大値)ということになります。

 そこで、実際に画像を作ってみます。まず下げたい値 51 (20%ポイント)の画像を作成します。

一律 明度値 51 の画像

 この画像を、0.0-1.0に標準化した元画像で割ります。つまり明度の逆数を掛けた画像を作ります。これはImageJで作成しました。

上の図に明度の逆数を掛けた画像

 この画像は低下%調整値フィルターになります。暗いところほど調整値が高く、明るいところほど調整値が低くなりますので、ネガ画像になります。但し単純に画像を反転したネガ画像とはトーンが異なります。

 この画像を反転して低下率フィルター画像を作ります。

上の図を反転した画像 (低下率フィルター画像)

 明るいところほど低下率が低いので明るく、暗いところほど低下率が高いので暗くなります。つまり、均一の明るさのレイヤーを乗算モードで載せては減算と一致しないということです。この画像をオリジナル画像に乗算すると、20%ポイント(=51)減算モードの画像と一致します。

上の画像をオリジナルに乗算した結果

 画像全体の値を20%ポイント(最大値に対する)下げるには、つい、80%の明度のレイヤーを乗算モードで載せればよいのではないかと錯覚しがちですが、要するに画像全体の値を20%下げるのと、20%ポイント下げるのでは異なる、ということです。

-------

(2)に続きます。