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

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

ImageJ 対応 sRGB TRC en / decoder

 ImageJ (Fiji) 上で動く sRGB式トーン再現カーブ (TRC) のデコード/エンコードを行うツールを作ってみました。既に ImageJ には色空間を変換するプラグインはありますが*1、一般的な sRGB 式の TRC を掛けたり外したりするプラグインです。TRC を外すとリニア画像になります。また、TRC の変更は行いますが色空間自体は変更しません。ガンマ2.2の近似カーブではく、正確に変換を行います。因みに、sRGB式 TRC の計算式は、ブラックポイントを 0.0 ホワイトポイントを 1.0 とした場合、0.0 から 0.0031308 の範囲では元の値を 12.92 倍し、それより元の高い場合は、元の値に 1/2.4乗して (ガンマ 2.4)、そこで得られた値を 1.055 を乗じて、そこから 0.055 を引きます。デコードするときは逆に、0.0031308 を 12.92 倍した 0.04045 で分割し、それ以下の値については、12.92 で除するとともに、それを超える値は、一旦 0.055 を加え、さらに 1.055 で割り、さらにその値を 2.4 乗 (ガンマ 1/2.4)します。

 

 また、ImageJ 上で Python を通して個別ピクセル操作を行いますと非常に処理に時間がかかりますので、個々のピクセル操作を行わないようにして TRC の変更を行うようにしました。そのため元の画像を2つコピーし、シャドウ領域の計算を行う画像では、閾値より高い値をすべてホワイトポイント値に変更した上で、12.94 倍する一方、それ以上の明るさの領域の計算を行う画像では閾値より低い値をすべてホワイトポイント値に変更した上で、ガンマ計算等を行い、最後に両者の比較をして比較暗値を採用した画像を最終的な変換画像としました。

計算アルゴリズム

 なお、sRGB デコードを行う際、一旦 0.055 を加えますが、この時、画像が 8bit もしくは 16bit の場合、ホワイトポイント点またはそれに近い明るいピクセルがあると、データクリップを起こします。従ってデコード後の結果は若干不正確になりますが、実用上は問題ないものと思います。この点ご承知おきください。気になる方は 32bit 画像をお使いください。

 因みに、8bit 画像をリニアな画像に直すと、シャドウ部の諧調幅が、人間の目でも知覚できるほど荒くなりますので、一般的にはお勧めできません。

 ダウンロードして、ImageJ のプラグインディレクトリに入れますと、メニューから実行できるようになります。

メニュー

 これを実行しますとまずファイル選択ダイアログが開きますので、開きたいファイルを選択します。次に作業内容を選択するダイアログが開きます。

作業内容選択ダイアログ

 要は、sRGB式 TRC をエンコードするのかそれともデコードするのかを選択します。デフォルトはデコードです(多分世の中に出回っている画像の大半は sRGB TRC エンコード済みと思われますので)。選択したら OK ボタンを押します。

作業途中

 すると作業が始まります。

終了 (TRC デコード後)

 終わりますと、TRC Conversion finished と表示が出ます。そして変換結果が表示されるとともに、元画像があるディレクトリに、新しいファイルとして保存されます。ファイル名はデコードされた画像の場合、

元ファイル名 + _sRGB_TRC_decoded.tif

というファイル名になりますし、エンコードした画像の場合、

元ファイル名 + _sRGB_TRC_encoded.tif

となります。なお、ImageJ はカラーマネジメント非対応なので、リニアに変換すると、画像が暗くなります。

 因みに上の画像、デコード適用前は以下の通りでした。

sRGB 式 TRC デコード前

 なお、適用できる画像には次の制限があります。ホワイトポイント(明度の最高値) の値が 8bitファイルの場合 255、16bit ファイルの場合、65535、32bit ファイルの場合、1.0、255, 65535, 4294967295 のいずれかを前提とします。また、値は正負符号無し (マイナスの値を取らない) ものとします。それ以外の画像に適用すると正しく変換されません。

 よろしければご活用ください。ダウンロードはこちらから。

 なお保存される画像は ImageJ 特有のスタック形式のRGB画像になりますので、他ソフトで読み込むと RGB ばらばらのマルチページ TIFF として読み込まれます。従って、読み込んだソフト上でRGB合成を行わなければなりません。また ImageJ はカラーマネジメント非対応なので、リニア画像に変換した場合は、読み込んだソフト上で、リニアなカラープロファイルを適用してください。

 なお当プログラムは、クリエイティブコモンズ CC BY-SA 4.0 条件の下、配布します。また当プログラムは現状のまま提供されるものとし、当プログラムを使用した結果被ったあらゆる損害に対し補償に応じられないことを承諾の上使用していただくものとします。

----------

[関連記事]

yasuo-ssi.hatenablog.com

*1:以下をご参照ください。

Color Space Converter