SSブログ

Rasberry Pi のPythonでRAW現像プログラムテスト [Raspberry Pi]

rawpyというPythonのモジュールでカメラのRAWファイルを読み込んで、
自分でRAW現像のプログラムがかけるという情報を得たので試してみた。
なお、作ったプログラムはgithubに置いてあるので、参照してください。
(ブログ中の画像ファイルはすべて画素数を小さく加工してあります)

参考記事 というか、下記の手順をそのまま試してみた。
ゼロから作るRAW現像その1 - 基本的な処理
http://uzusayuu.hatenadiary.jp/entry/2018/09/23/162412


1. 必要なモジュールのインストール
 % pip3 install rawpy
 としてみるとなにやら libraw が無いというようなエラーが出た。
 Raspberry Pi では使えないかと一瞬思ったが、librawというのが必要なのかも? と思い
 % sudo apt-get install libraw-bin libraw-dev libraw-doc
 % pip3 install rawpy
 あっさりインストール出来た。ついでに他に必要なモジュールもインストールしておく。
 % pip3 install imageio

2. 最初のテスト
 まずはrawpyがPENTAXのRAWファイル (*.PEF) に対応してるかが不安だったので、
 RAWファイルを読み込んで、RAWファイルの情報を取得するものを作ってみる。
 ファイルは raw_info.py (github参照)
 実行してみると、(下記は一部のみ表示)
 % python3 raw_info.py
 camera_whitebalance
 [13312.0, 8192.0, 9152.0, 8192.0]
 color_desc
 b'RGBG'
 sizes
 ImageSizes(raw_height=2624, raw_width=3936, height=2616, width=3896, top_margin=0, left_margin=0, iheight=2616, iwidth=3896, pixel_aspect=1.0, flip=5)
 ちゃんと情報が表示された。PENTAXに対応してて良かった。

3. try1 RAWファイルを読み込んで無理やり表示
 今回のテストとして下記のRAWファイルを入力した。
 ただし、この画像は通常の現像ソフトを使って明るさやコントラストなどを調整した画像です。
IMGP0243_e01_sa2_c2_1024_s.jpg

 最初のファイルは try1.py (githubを参照)。
 実行した結果はこうなった。
try1_s.png
 なんとなくRAWファイルが読み込めているのが分かる。
 縦横が違うのは最後に調整すればいいので、今は気にしない。

4. try2 Black level 調整
 黒レベルの調整を行ってみる。
 ただし調整するためのblack_level_per_channelの値が[0, 0, 0, 0]なので変化はないはず。
 ファイルは try2.py (githubを参照)
 結果は下記の画像。
try2_s.png
 全然変わってない。

5. try3 demosaicの実行
 RAWファイルの1画素の値はRGBの値ではなくて、RかGかBのどれかの色の値しか持っていない。
 だいたい2x2の画素で下記のように配置されている (R=Red, G=Green, B=Blue)
   R G
   G  B
 これを合成することで各画素の色を作り出すようになっている。
 ただし、ここでは最初のお試しなので、4つの画素から1つの画素を作る簡易でモザイク処理を
 試してみる。(結果的に画素数は縦横半分の大きさになる)
  R = R
  G = 2つのGの値の平均値
  B = B
 という計算をして色を作り出して画像を作ってみた。
 ファイルは try3.py (githubを参照)
 結果は下記の画像
try3_s.png
 なんとなく色が出てるけど全体的に青っぽい感じ。

4. try4 ホワイトバランスの調整
 RAWファイルにcamera_whitebalance [13312.0, 8192.0, 9152.0, 8192.0] という値があるので
 これを利用してホワイトバランスの調整を行う。
 調整値は、下記の式になるらしい。
  R = 13312 / 8192
  G = 8192 / 8192
  B = 9152 / 8192
 ファイルは try4.py (githubを参照)
 これでRGBの値を調整した結果が下記の画像
try4_s.png
 全体的に暗いけど、赤みが増した感じ。try3の結果より色がいいが、ちょっと赤く感じる。

5. try5 ガンマ補正
 目に映る色の強度はリニアではないので、それに合わせてガンマ補正を行う。
 ファイルは try5.py (githubを参照)
 結果が下記の画像
try5_s.png
 コントラストが低めだけど、少し明るくなった感じ。

6. try6 カラーマトリクス補正
 カメラのセンサーの色の癖を見た目に合わせて調整する。
 ただしRAWファイルに保管されているcolor_matrixの値がすべて "0" だったので、
 かわりにrgb_xyz_matrix
  [[ 0.9566 -0.2863 -0.0803]
   [-0.717 1.5172 0.2112]
   [-0.0818 0.0803 0.9705]
   [ 0. 0. 0. ]]
 を利用してみた。
 ファイルは try6.py (githubを参照)
 結果が下記の画像。
try6_s.png
 赤が強すぎて色味がエグい感じに見える。
 たぶんrgb_xyz_matrixを使うのが間違いな感じ。これは失敗。

とりあえずここまでで try5.pyの結果、RAWファイルから画像ファイルを作り出せるようになった。
PythonでRAWファイルの現像を自分で試せるとは思っていなかった。
しかもRaspberry Piで動くのは便利。
処理時間はtry5.pyで10分くらい時間がかかっているのはしょうがないかな?

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。