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

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

フィルム画像のダメージ度合いを測定する ImageJ対応 チャンネル間相関統計計算ツール

f:id:yasuo_ssi:20210310145522j:plain

 今回、フィルム画像のダメージ度合いを診断するための、画像統計計算ツールを作成しましたので公開します。先日、ImageJの getStatistics APIを使った簡単な画像統計表示ツールを公開しました。このプログラム、単に、ImageJのgetStatistics メソッドを使って、獲得した統計値を表示するという非常に単純なものですが、意外に記事に対するアクセスがありました。

 ただそれだと、画像ダメージの指標となる画像チャンネル(R, G, B)間の相関係数が計算できません。そこで、今回チャンネル間の相関係数や平均値、標準偏差等を出力するImageJに対応した統計計算ツールを開発してみました。

 今回のツールの非常にユニークな特徴として、

1. チャンネル間の相関係数が計算できる

 は、もちろんですが、その他に

2. 任意に指定した、画像の部分的な矩形範囲の統計が計算できる

3. 任意に指定した、輝度範囲を限った統計が計算できる

という他に類を見ない特徴を備えています。

 また、Bチャンネル再建法補正ツールに対応した

 4. マニュアルで補正値を調整する場合の目安値の計算機能

も付けました。

 まず、1. のチャンネル間の相関係数の計算ですが、先日お示ししたように、ダメージが大きいほどチャンネル間の相関係数 (特にBチャンネルとGチャンネルの相関)が低くなる傾向にあり、拙作のBチャンネル再建法フィルム画像黄変補正ツールに内在されている、拡張擬似フラットフィールド補正アルゴリズムだけでは黄変の補正が不十分になる傾向が見られます。

 一般的な風景画像ですと、正常な画像の場合、G-R間の相関係数が最も高く、G-B間、R-B間の順に相関係数が下がる傾向にあります。そして通常、G-R間の相関係数は0.95以上 (0.97〜0.98ぐらいが多い)、G-B間は0.95前後程度、そして相関が低めのR-B間でも 0.8代後半から0.9前後を大きく下回ることはあまりありません。大体0.90代前半あたりの数値になることが多いです。

 人間の感覚だと、G-B間より、G-R間の相関が高いのは意外ですが (主観的には、青と緑のほうが近いように感じるので) 、実は植物の緑は結構、GとRの値が高く、B が低いというパターンなので (特に新緑は G-R と Bの落差が大きい) 植物の緑が多く写っている景色ほど、G-R間の相関が高く、G-B間の相関は低くなります。一方、植物がほとんど写っていない都市の風景などは、人間の直感通り、G-R間より、G-B間のほうが相関係数が高くなることが多いです。

 例えば以下の写真の場合...

 R-G間の相関係数は、0.98、一方、G-B間の相関係数は、0.96です。

一方、以下の写真では...

 R-G間の相関係数は、0.93、一方、G-B間の相関係数は、0.95です。こちらはG-B間が上になっていますが、植物がほとんど写っていない影響です。またR-G間が低めなのは照明の影響等もあると思います。

 

 ともあれ、通常 G-B間の相関は、一般的な風景写真であれば、0.95前後あるのが普通ですので、それが0.8代、さらに0.7代と下がって来るとそれだけ黄変のダメージが大きい目安になります。

 なお、当然ですが、一般的な風景写真でない場合は正常な画像でも上の範囲に収まるとは限りません。例えば人工的な色で塗られた物体が画像の大きな部分を占めているような画像では、当然ですが、上の傾向は全く当てはまりません。例えば、下記の画像の場合...

赤が大きな範囲を占めている画像

当然ですが、R-G間の相関係数は0.57, R-B間の相関係数は、0.38, G-B間の相関係数は、0.79になりました。

 また次の画像の場合ですが...

青が大きな割合を占める画像

こちらは、R-G間の相関係数は0.80, R-B間の相関係数は0.53, G-B間の相関係数は0.93になりました。このように、特定の色の人工物が広い面積を占める画像に関しては、相関係数の低さをダメージの指標とみなすことは困難です。なお、同じ特定の色の人工物が広い面積を占める画像でも上の写真がよりチャンネル間の相関が低く、下の写真の方がチャンネル間の相関が高いのは、上の写真の色がより原色に近く、下の写真の色は原色から離れているためです。

 また、以上の人工物の写真は、上で述べた通り、R-G間の相関係数がG-B間の相関係数より低くなっています(植物がほとんど写っていませんので)。

 あるいは特殊な色のついた光源の下で撮られた写真や、風景写真でも朝焼けや夕焼けで赤く色が被ったような写真でも、上の標準的な相関係数の話はあてはまりません。ホワイトバランスが取れていて、かつ、より様々な色の多様なものが写っている写真であてはまる話です。

 次に、2. 任意に指定した、画像の部分的な矩形範囲の統計が計算できる という特徴ですが、例えば下の画像をご覧ください。

サンプル画像

 この画像は黄変が空の部分のみに広がっています。実はこの画像、Bチャンネル再建法ツールをデフォルト設定で走らせると、どうしても空の黄変に取り切れない部分が出てきてしまいます。もちろん、Bチャンネル再建法ツール適用後に、イエロー透過マスクを作成して追加補正を行えば黄変を取ることができます。とはいえ、Bチャンネル再建法ツールのデフォルト設定だと黄変が取り切れないということは、結構ダメージが大きいことを示しています。ところが、本ツールで画像統計を取ると...

画像ファイル統計: 1986_9_上田交通NC_0019s.tif
1番目の色Ch: Blue 2番目の色Ch: Green
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 844
色Ch間ピクセル輝度差の平均: 23.41 Ch 1平均輝度: 148.84 Ch 2平均輝度: 125.42
輝度差分散: 168038.03 輝度差標準偏差: 25.62 輝度最高差: 148.47 輝度最低差: -109.35
Ch1分散: 649277.99 Ch1標準偏差: 50.36 Ch2分散: 877807.64 Ch2標準偏差: 58.56
Ch1-2 共分散: 679523.39 ピアソン相関係数: 0.90

なぜか、BチャンネルとGチャンネルの相関係数がやや低めとは言え結構高くなります(因みにR-G間の相関係数は0.97)。これは空以外の部分が正常なので (画像はややマゼンタがかっていますが、これは化学的変性の結果ではなく、おそらく白色光源のスキャナでスキャンしているためで、さらにスキャナドライバの補正の癖が加わっていると思います) 、この部分に引きずられて、正常値に近い範囲に入ってしまうからです。

 

 そこで、黄変している範囲のみを指定して再度統計計算してみると...

計算範囲を空の部分に限定
1番目の色Ch: Green 2番目の色Ch: Blue
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 300
色Ch間ピクセル輝度差の平均: -6.36 Ch 1平均輝度: 187.01 Ch 2平均輝度: 193.36
輝度差分散: 138338.01 輝度差標準偏差: 23.25 輝度最高差: 109.35 輝度最低差: -120.34
Ch1分散: 251634.30 Ch1標準偏差: 31.35 Ch2分散: 102146.01 Ch2標準偏差: 19.98
Ch1-2 共分散: 107721.15 ピアソン相関係数: 0.67

 BチャンネルとGチャンネルの相関が0.67と結構低く、かなりダメージの度合いが大きいことが分かります。

 3. 任意に指定した、輝度範囲を限った統計が計算できるという特徴は、フィルムでも、例えばハイライト部とシャドウ部で色素の変性の進み方が異なるということは十分考えられます。それを調べるには明るさのゾーンごとに統計を取る必要があります。そのための機能です。

 例えば、上のサンプル画像ですが、0-128の範囲で相関係数を求めると、0.83、128-255の範囲で相関係数を求めると、0.67となりました。明るい部分のピクセルの大半は空ですので、当然差が出てきます。

 そして、最後に 4. マニュアルで補正値を調整する場合の目安値の計算機能です。これは Bチャンネル再建法のエキスパートモードで、拡張疑似フラットフィールド補正で補正が不十分になる場合のために補正量をマニュアルで調整する機能を搭載していますが、そのための目安値を計算する機能です。マニュアルで補正量を調整する場合、この値をちょっと上回る値を設定していただければよいのではないかと思います。この値は、2つのチャンネルの輝度差の標準偏差から、輝度差の平均値の絶対値を引いた値です。但し、これを出力するのは、相関係数が0.90未満の場合のみです。おそらく相関係数が0.90以上ならデフォルト設定でBチャンネル再建法補正ツールを走らせても問題ないと考えられるからです。ただ、相関係数が0.90以上でも目安値を知りたい場合は、ご自分で、2つのチャンネルの輝度差の標準偏差から、輝度差の平均値の絶対値を引いていただければ良いです。

 なお、本機能は、次期Bチャンネル再建法補正ツールのバージョンアップに向けた布石でもあります。

 なお、上に述べたように黄変が部分的に偏っている場合は、より正確な値を求めるためには、黄変部分に領域を限って計算させてください。

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

 では具体的な説明方法に入ります。

1. 準備

 本ツールをこちらからダウンロードし、解凍してから、ImageJのプラグインフォルダにコピーしてください。なお、下の例ではプラグインフォルダの下に My_Plugins というフォルダを作ってそこに入れています。

2. 利用方法

 ImageJのプラグインメニューから本ツールを探して起動します。

メニュー上表記

 起動するとすぐにファイル指定ダイアログがたちががりますので、計算させたいファイルを指定します。読み込みが終了すると、以下のパラメータ指定ダイアログが出ます。

パラメータ指定ダイアログ

 このプログラムはPython上でピクセル単位の操作をやっているので結構時間がかかります。写真のダメージの程度を知る目安には、相関係数の精度はさほど高くなくても問題ありませんので、計算時間節約のために、[Resize to width 1280] にチェックを入れたままにしたほうが良いでしょう。

 その下に、相関係数を比較したいチャンネルを2つ指定します。但し、[Calculate all channels] にチェックを入れると、指定にかかわらず、 R,G,B相互すべての計算結果を出力します。

 その下は、計算させたい輝度範囲を指定したい場合、下限と上限を指定します。ここを両方とも 0 のままにしておきますと、全輝度範囲を対象に計算します。

 [Display working windows] は中間の作業ウィンドウを表示するかどうかですが、計算に時間がかかるので、表示させておけば終わったときにウィンドウを閉じますので分かりやすいです。

 ここで、OKを押すと、計算範囲を指定するダイアログに移ります。

計算範囲指定ダイアログ

 全範囲を計算させるならそのままOKにして下さい。一部を計算させるなら、座標を指定して範囲を指定します。[Preview ROI] にチェックを入れたままにすると、どの範囲を指定しているのかプレビューウィンドウに表示されます。

 指定が終わったらOKボタンを押してください。

 

 計算結果は、オリジナルファイル名_resultxx.txt というような名前でファイルのあるフォルダに出力されます。なお計算結果のみ日本語で出力します。下記は、計算結果の一例です。

-------------------------------
画像ファイル統計: 1986_9_上田交通NC_0019s.tif
1番目の色Ch: Blue 2番目の色Ch: Green
計算対象輝度範囲(グレースケール): 128.0 - 255.0
計算対象ROI: X: 0 - 1280 /Y: 0 - 844
色Ch間ピクセル輝度差の平均: 9.25 Ch 1平均輝度: 195.35 Ch 2平均輝度: 186.10
輝度差分散: 147795.97 輝度差標準偏差: 24.03 輝度最高差: 122.90 輝度最低差: -193.29
Ch1分散: 94635.30 Ch1標準偏差: 19.23 Ch2分散: 210190.95 Ch2標準偏差: 28.65
Ch1-2 共分散: 78522.12 ピアソン相関係数: 0.56
マニュアル補正調整量目安: 14.78
--------------------------------

 なお、次の画像も計算してみました。

補正前 オリジナル

 先日の記事で、この画像の Bチャンネルの補正量をマニュアル調整してみたらどうなるかというのを書きましたが、この画像に対してこのツールを走らせてみると、B-G間の輝度差の標準偏差は 28.85 そして、マニュアル補正量の目安は 25.06となりました。先日の記事では、マニュアル補正調整量は 25 ~ 50の間が適切なのではないか、と書きましたが、大体良い線なのではないかと思います。

この画像の統計量を提示します。

--------------------------------
画像ファイル統計: 1983_06_08飯田線NC_0001s.tif
1番目の色Ch: Red 2番目の色Ch: Green
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 825
色Ch間ピクセル輝度差の平均: -3.84 Ch 1平均輝度: 111.51 Ch 2平均輝度: 115.35
輝度差分散: 46149.67 輝度差標準偏差: 13.43 輝度最高差: 154.76 輝度最低差: -109.11
Ch1分散: 603712.40 Ch1標準偏差: 48.56 Ch2分散: 514590.81 Ch2標準偏差: 44.83
Ch1-2 共分散: 536076.77 ピアソン相関係数: 0.96
--------------------------------

1番目の色Ch: Red 2番目の色Ch: Blue
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 825
色Ch間ピクセル輝度差の平均: -0.06 Ch 1平均輝度: 111.51 Ch 2平均輝度: 111.56
輝度差分散: 318336.90 輝度差標準偏差: 35.26 輝度最高差: 156.93 輝度最低差: -152.53
Ch1分散: 603712.40 Ch1標準偏差: 48.56 Ch2分散: 500140.24 Ch2標準偏差: 44.20
Ch1-2 共分散: 392757.87 ピアソン相関係数: 0.71
--------------------------------

1番目の色Ch: Green 2番目の色Ch: Blue
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 825
色Ch間ピクセル輝度差の平均: 3.79 Ch 1平均輝度: 115.35 Ch 2平均輝度: 111.56
輝度差分散: 213115.60 輝度差標準偏差: 28.85 輝度最高差: 157.32 輝度最低差: -140.42
Ch1分散: 514590.81 Ch1標準偏差: 44.83 Ch2分散: 500140.24 Ch2標準偏差: 44.20
Ch1-2 共分散: 400807.72 ピアソン相関係数: 0.79
--------------------------------

 Bチャンネルと他チャンネルの相関係数が0.7代と低いですが、これが黄変によるダメージを示しています。

 

 因みにこれをBチャンネル再建法補正ツール Ver. 4.6 で補正した画像では...

ARTによる最終編集結果

--------------------------------
画像ファイル統計: 1983_06_08飯田線NC_0001s_補正4_new_sigma.tif
1番目の色Ch: Red 2番目の色Ch: Green
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 825
色Ch間ピクセル輝度差の平均: -8.65 Ch 1平均輝度: 108.33 Ch 2平均輝度: 116.98
輝度差分散: 38163.76 輝度差標準偏差: 12.21 輝度最高差: 186.76 輝度最低差: -100.89
Ch1分散: 1251095.05 Ch1標準偏差: 69.91 Ch2分散: 1212207.26 Ch2標準偏差: 68.81
Ch1-2 共分散: 1212569.27 ピアソン相関係数: 0.98
--------------------------------

1番目の色Ch: Red 2番目の色Ch: Blue
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 825
色Ch間ピクセル輝度差の平均: -12.10 Ch 1平均輝度: 108.33 Ch 2平均輝度: 120.43
輝度差分散: 117835.43 輝度差標準偏差: 21.45 輝度最高差: 149.46 輝度最低差: -124.38
Ch1分散: 1251095.05 Ch1標準偏差: 69.91 Ch2分散: 1285850.32 Ch2標準偏差: 70.87
Ch1-2 共分散: 1209554.97 ピアソン相関係数: 0.95
--------------------------------

1番目の色Ch: Green 2番目の色Ch: Blue
計算対象輝度範囲(グレースケール): 0.0 - 255.9
計算対象ROI: X: 0 - 1280 /Y: 0 - 825
色Ch間ピクセル輝度差の平均: -3.45 Ch 1平均輝度: 116.98 Ch 2平均輝度: 120.43
輝度差分散: 32406.49 輝度差標準偏差: 11.25 輝度最高差: 65.66 輝度最低差: -65.23
Ch1分散: 1212207.26 Ch1標準偏差: 68.81 Ch2分散: 1285850.32 Ch2標準偏差: 70.87
Ch1-2 共分散: 1232825.54 ピアソン相関係数: 0.99
--------------------------------

 大幅にG-Bの相関係数が上がっています。Gチャンネルの情報をBチャンネルに流用しているので当然と言えば当然ですが。ただ、この画像ほぼ人工物のみが写っていますので、R-G間の相関係数より高いのが適切で、R-G間の相関係数が0.98とそもそも高いので、それより高い0.99で妥当な数値です。

 なお、R-G間も上がっていますが、これはマゼンタ補正等の追加補正を行ている影響と考えられます。

 

 なお、ImageJのPythonは、じつはPythonを通して Java を動かす Jython なので Numpy などの Cベースの数値計算ライブラリが使えません。そのため実行速度がいささか遅くなっています。今後、計算式を、追加インストールの不要な Java ベースの数値計算ライブラリに置き換えることで、もうちょっと実行速度があげられるのかどうか、探求してみたいと思います。

 

 なお、本記事で紹介した写真補正技法やソフトウェア (Plug-in) は個人的用途および非営利目的であれば自由に使っていただいて構いませんが、本技法を使って何らかの成果 (編集した写真等) を公表する場合は、本記事で紹介した技法を使った旨クレジットをつけて公表していただくことをお願いします。

 また、本ソフトウェアは現状のまま提供されるものし、作者はこれを使ったことによるいかなる損害補償等にも応じられないことを了解の上使っていただくものとします。
 但し、もしソフトウェアのバグがありましたら、ご連絡いただければなるべく改善するよう努めたいと思います。

 営利・営業目的で使用される方は別途ご相談下さい。

 また、私の作成したPlug-inも自由に改変して使用していただいて構いませんが、その成果を公表する場合はご一報下さい (公表しない場合は特に連絡は必要ありません)。またその改良した結果を私の方で自由に利用させていただくこともご了承下さい。