この記事は GW Advent Calendar なんか書く太郎 の1日目の記事です。(めっちゃ遅れた)
moiz さんの PythonとColabでできる-ゼロから作るRAW現像 を読んで現像の基本的な仕組みを理解したのち、実際に自分で撮った RAW 画像を現像してみたい。
私のPythonレベル
Python は2系のときにちょっとだけクローラーをいじったことがある程度でほぼ何も知らない。Homebrew で揉めてたことくらいは知ってる。
Python を学ぶ
numpy 以前に、Python のスライス調べた。
a = np.asarray([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]])
print(a)
/*
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
*/
print(a[::2, ::2])
/*
[[ 0 2]
[ 8 10]]
*/
Step 便利。
あとは割と直感的で言語仕様を調べることはなかった。
現像処理を学ぶ
- black_level_correction
- lens_shading_correction
- defect_correction
- white_balance
- demosaic
- noise_filter
- color_correction_matrix
- gamma_correction
- edge_enhancement
- tone_curve_correction
この辺を読みながら写経して理解した。
仕組みを理解しやすいよう、ループを使ったコード例の後に、numpy による高速化コードが載っていて、とても理解しやすかった。
Pixel3 で撮影した画像の現像
「ゼロから作るRAW現像」では「RaspberryPi、ソニー α7 Ⅲ」でやっていたが、手持ちの Pixel3 が RAW 撮りができたので、Pixel3 で撮った RAW 画像を現像してみる。
以下が RAW 画像。(以前勤めていた会社で先輩に頂いたフクロウのキーホルダー)
exiftool
で現像に必要な情報を得る。
$ exiftool pixel3.dng
使いそうなのは以下。 Color Matrix
はなんか分からんけど2つあった。
Bits Per Sample : 16
Black Level : 1023 1024 1022 1022
White Level : 16368
Color Matrix 1 : 1.0598 -0.5058 -0.1606 -0.9956 1.9269 0.0401 0.0642 -0.2328 1.2123
Color Matrix 2 : 1.6298 -0.7708 -0.2489 -0.9956 1.9269 0.0401 0.0482 -0.1686 0.8591
とりあえず、 現像してみると緑がかった画像ができた。
色々見てみたら、 ホワイトバランスの調整に使ってる値 raw.camera_whitebalance
が [1.6331729888916016, 1.0, 2.178725242614746, 0.0]
となっていた。最後の緑成分の値が 0.0
なので 1.0
と修正するとうまくいった。
Color Matrix
は2つとも試してみたが、キレイな色が出なかったため、raw.color_matrix
として取り出した値を使うとうまく行った。
おわりです。