2012年6月18日月曜日

モノクロフィルムふう Script-Fu


デジタルカメラで撮影したカラー画像をモノクロフィルムっぽく。
GIMPさんにお願い!
(define (script-fu-monochrome-film-fu img layer)
  (let* (
         (copy-layer (car (gimp-layer-copy layer TRUE)))
         (new-mask (car (gimp-layer-create-mask copy-layer 5)))
         )
    (gimp-image-add-layer img copy-layer -1)
    (gimp-layer-add-mask copy-layer new-mask)
    (gimp-curves-spline new-mask 0 8 #(0 192 16 96 64 42 160 0))
    (plug-in-noise-generator 1 img layer 0 0 10 0 0 0)
    (set! layer (car (gimp-image-merge-down img copy-layer 0)))
    (gimp-curves-spline layer 0 8 #(0 0 64 32 200 230 255 255))
    (plug-in-colors-channel-mixer 1 img layer 1 0.299 0.587 0.114 0.299 0.587 0.114 0.299 0.587 0.114)
    )
  (gimp-displays-flush)
  )

(script-fu-register
 "script-fu-monochrome-film-fu"
 "Monochrome Film Fu..."
 "description"
 "name"
 "copyright"
 "date"
 "RGB*"
 SF-IMAGE     "Image"     0
 SF-DRAWABLE  "Drawable"  0)

(script-fu-menu-register "script-fu-monochrome-film-fu"
                         "<Image>/Filters/Test")
※GIMP 2.8.0で動作を確認しました。
※期待したとおり動かないかもしれません。
※動かなくても、何が起きても、たとえ悪魔が呼び出されたとしても、責任は取りません...

Script-Fuについてはこちらを参考にさせていただきました。
GIMP使用のてびき(GIMPスクリプト)
Script-Fu 青空教室(スクリプトの実行方法はこのあたり)
Macの場合、スクリプトは下記に置けばOKみたいです。
~/Library/Application Support/Gimp/scripts


さてさて、粒状感をどうするか、というところから。
しかしながら、これは思った以上に奥が深そうで、そもそも。

こちらのドキュメントがとっても参考になります。
Film Grain, Resolution and Fundamental Film Particles

グレインの霧が晴れたかのように思えた説明を引用させていただきます。
Film grain is the product of the human eye and brain working in combination when viewing very large numbers fundamental image particles
顕微鏡写真(Page 19)を見ると「粒」の形状をなしていない...
たくさんの濃淡の集まりを見るとき、それを表示する大きさによっては、脳が粒状として認識してしまうということかしら。
粒状性の表し方のひとつであるところのRMS粒状度にしたって、濃度のばらつきであって、粒子の大きさ自体の単位ではないのでした。

化学反応極まる銀塩写真を再現することはできないし、
あまり突っ込まずに、それらしく自分の脳をだましておくことにしよう。


それらしく、に注力するとして、何か参考になるものは...
ということで、フィルムスキャナでスキャンした画像を観察してみました。
バス停の横の看板のあたりを等倍表示すると、、、
これは、いわゆる粒状として期待されているようなテクスチャに見えませんか?
はい。見えます。

粒状性は露出、現像のしかたによって、ずいぶん変わるようです。
デジタル化する際には、スキャンする解像度でもその見え方は変わってきます。
なので、これはあくまで、この写真をこのスキャナの解像度でスキャンしたときの雰囲気を再現するための試行、くらいの意味しかないので。

さてさて、明るさの違う場所でいくつかヒストグラムをとってみました。
Mean 211.9 / Std dev 10.7
 Mean 141.7 / Std dev 10.7
 Mean 100.8 / Std dev 9.2
 Mean 37.4 / Std dev 4.9

ノイズは正規分布っぽく、標準偏差の変化もなんとなく想像してたのと近い結果です。ネガポジ変換が行われて、ガンマがかかって、さらにスキャナ自体のノイズの影響もあるだろうし、ちっとも正確なデータではないんだけども。そこは。
こういったノイズを再現すれば何となくそれらしく見える。かも。と言い聞かせつつ。


【レシピ】
  1. ガウスノイズを加えた画像を生成
  2. 元画像にノイズ画像を混ぜる(暗いところはやや控えめに)
  3. コントラストを強めに
  4. モノクロ画像に変換
Script-Fuでやってるのはこれだけです。(スクリプトでは一部処理の順序が前後しています。)

GIMPさんの機能を呼び出しているだけなので、手動でも同じことができます。
お好みで下記のパラメータを調整するのがいいかと。
  1. FIlters->Noise->Noise generatorでガウスノイズの標準偏差を変える
  2. マスクのトーンカーブ(Colors->Curves)で明るさに応じたノイズの量を調整
  3. Colors->Curvesで好みのコントラストに
  4. Colors->Components->Channel MixerでRGBの比を調整
※モノクロ化は最後に。入出力が同じビット深度の画像でコントラストを調整すると、だいたいトーンジャンプが起こるんだけど、RGBを混合するときにある程度はごまかせます。たぶん。


Thanks,

hiro