高尾山麓日誌

東京、高尾山麓付近に暮らす日常から、高尾山の状況や、高尾山・八王子周辺地域で気付いたこと、周辺鉄道情報などを掲載

別チャンネルの一定の以下の暗い部分をBチャンネルに流用するには

2017-11-03 08:58:27 | カメラ
 時間が経ったネガフィルムスキャン画像のBチャンネルには一定以下の暗い部分の画像が失われている場合が多々あります。その場合、その部分のみ他チャンネルから流用する方法について記しておきます。なお、画像は8bit画像を前提とします。なお流用する他チャンネルをIとし、チャンネルを流用する暗さの境界線を示す明るさをxとします。

 単純に、境界線なくIチャンネルの Bチャンネルより暗い部分をすべてBチャンネルに流用するのであれば、GIMP、Photoshopとも、Bチャンネルを下にし、流用チャンネルを上にして、レイヤーパネル上で、流用チャンネルのモードに「比較(暗)」を選択すれば流用チャンネルのBチャンネルより暗い部分のみBチャンネルに流用できます。

 しかし、流用する暗さに境界線を設けるなら単純ではありません。

 でそのためには、Iチャンネルの画像に(255-x)を加算します。するとxを越える画像が飽和し、真っ白になります。同時にBチャンネルにも(255-x)を加算し、その画像をI+(255-x)画像から引きます1)。その画像を反転し、その画像で元のBチャンネル画像を減算すると、x以下の暗さのみIチャンネルから流用した、補正Bチャンネル画像ができます。

 式で示すと以下の通りです。

補正B = B - Invert((I+(255-x))-(B+(255-x)))

 事例を示します。
まずオリジナルのBチャンネルです


ヒストグラムを見ると、50以下の成分がほとんどないのが分かります。


そこで、55以下の部分だけRチャンネルから流用することを考えます・

こちらがRチャンネルです。Bチャンネルよりも暗い部分が豊富にあることが分かります。


まず、Rチャンネルの56以上の成分を消すために、画像全体に200を加算します。これは8bit画像の場合、256以上に値は飽和して、一律255になりますので、それを利用し、56以上の画像を消すのです。すると白っぽくなりますので、これを反転すると、55以下の部分のみ残ったネガ画像が得られます。

より暗い部分ほど白っぽく(つまり+の値を取るように)なっています。

ヒストグラムを確認すると、55以下の部分のみ反転して残っていることが分かります。


なお、56以上が消えたネガ画像ではなく、ポジ画像が欲しい場合は、一旦200を加算して、56以上に部分が消えた後に、再度200を減算すればOKです。

また、このような画像全体に対する定数の加算には ImageJ というソフトウェアを使用しています。PhotoshopやGIMPでも前回紹介したように定数の加減算はできますが、一律定数(この場合は200)で塗りつぶした画像を用意しなければなりません。ImageJだと直接数式で指定できます。

上で得た画像をオリジナルのB画像から減算します。暗い部分ほど反転して大きな+の値を取りますので、減算するとより暗くなる計算です。


なお、オリジナルのBチャンネルには55以下の部分をほとんど含んでいないので省略しましたが、もしオリジナルのBチャンネルに55以下の部分を含む部分がある程度含まれていると、その部分のみ過剰に減算することになります。

その場合は、Rの55以下の部分の反転画像から、Bの55以下の成分を予め加算しておく操作が必要になります。

なお、単純にBチャンネルとRチャンネルのより暗い部分を比較し、暗い方を採用するなら、GIMPの場合、レイヤーパネルで、レイヤーを重ねるモードを「比較(暗)」にすれば両者を比較しより暗い方を採用した画像を簡単に得ることができます。


1) ここで、Bチャンネルのx以下の画像を減算する理由は、Bチャンネルに既に値が x 以下のピクセルがある場合、そこからそのまま後で I+(255-x) を引くと、過剰にBチャンネルが減算されてしまうため、その部分を相殺するためです。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。