2008-10-29

dcraw と Netpbm と ImageMagick

dcraw Tutorial (dcraw を用いた RAW 画像現像の手引き) を読み,同一条件で複数の対象を多数撮影するときの手順を考えてみた.pnmgamma および pamsummNetpbm に含まれる.ImageMagick には identify および convert が含まれる.

レンズキャップを付け,ダークフレームを撮影する.白色板を撮影する.18% グレー (例えば Munsell ColorChecker Gray Scale) を撮影する.その後,目標を撮影する.

dcraw -D -4 -t 0 -c darkframe.cr2 | identify -verbose - を実行する.Channel Statistics 中の GrayMean 値を見い出す.丸括弧の前の値 (0 から 65535) を darkness レベルとして,以後 -k オプションで与える. dcraw -D -4 -t 0 -c white.cr2 | identify -verbose - を実行する.同様に Max 値を見い出して saturation レベルとする.以後この値を -S オプションで与える. identity の代わりに pamsumm を用いることもできる.

ホワイトバランス調整をする. dcraw -t 0 -c white.cr2 | convert - white.png を開いて,白色板の領域を知る.この値を次のコマンドに -A オプションで与える. dcraw -v -4 -H 0 -S saturation -k darkness -c -t 0 -A left top width height white.cr2 > /dev/null の出力から multipliers 1.000000 1.002143 1.002924 1.000389 のような行を見い出す.この 4 値を -r オプションで与えることによってホワイトバランス調整を行なう.

グレーバランスを調整する. dcraw -t 0 -c gray.cr2 | convert - gray.png を開いて,グレーチャートの領域を知る. dcraw -v -4 -t 0 -o 0 -r mul0 mul1 mul2 mul3 -H 0 -S saturation -k darkness -c gray.cr2 | convert -crop widthxheight+left+top - - | identify -verbose - を実行する.Channel Statistics 中の red, green, blue それぞれの mean 値を見い出す. 丸括弧内の値 (0 から 1) をそれぞれ r, g, b としたとき,これを HSV に変換し,無彩色とするため S=0 とした後,RGB に再変換すると (v,v,v) となる.ここで v は r, g, b のうち最大の値である.これをガンマ値 G でガンマ補正すると,v1/G となる.r, g, b ともこの値に補正されるためのガンマ値はそれぞれ,G·log(r)/log(v), G·log(g)/log(v), G·log(b)/log(v) となる.これら 3 値を計算し,後で -gamma オプションに与える.

各ショットについて dcraw -v -4 -t 0 -o 0 -r mul0 mul1 mul2 mul3 -H 0 -S saturation -k darkness -c sample.cr2 | convert -gamma red-gamma,green-gamma,blue-gamma -depth 8 - sample.png を実行する.グレーバランス調整をしないのなら,convert の代わりに pnmgamma を使うこともできる.