rawpyでPython現像 その1(準備)

python

 自前でスクリプトからraw現像をしたくて調べてみたところ、rawpyというライブラリが使えそうなことがわかりました。結果としていろいろ遊べそうなのですが、日本語の解説ページがあまり見当たらず、いろいろ試行錯誤が必要だったので、その手順を残しておきます。

 スマホやコンデジの画像のノイズ除去処理があまり好きではなく、そのキャンセルがその動機です。ただ、このraw現像、奥が深いので深追いはしないです。カジュアルに撮影したrawデータをカジュアルに現像。本気で使いだすといつまででも遊べそうなので。

ライブラリの入手

 特に理由はないのですが、当方環境を2つ使っています。それぞれの環境でのライブラリインストールの方法を記載しておきます。慣れた人ならpipでちょちょい。という記述で何とかなるのかもしれませんが。

PyCharm

 GUIから入れられました。fileメニューからSettingsを選びます。

 Settingsが開き、左のProject Interpreterを選択すると以下のような画面になり、現状インストールされているライブラリがずらっと並びます。

 そこで右上の方にある「+」アイコン(Install)をクリックすると、AvailablePackagesの画面が出ます。

 そこから検索で”rawpy”と検索すると、出てきます。これを選んで、Install Packageを押すと、インストールが完了します。

Anaconda(Spyder)

 こちらもパッケージのインストールのGUIがあります。が、なぜか今回のrawpyは入れられませんでした。理由は不明です。

 通常ライブラリのインストールは”Anaconda Navigator”を起動し、”Enviroment”の”Search Package”で検索すると見つかるのですが、この手段では見つかりませんでした。このやり方で”OpenCV”も”Pillow”もあとから入れられたのですが、どうもうまく行きませんでした。ので、最後の手段”Anaconda Prompt”を起動させ、CUIベースでインストールさせます。

 プロンプトから、

pip install rawpy

 でインストールできました。必ずしもGUIだけではインストールできないんですね…。

rawデータの入手

 これは撮影したデータということになりますね。自分はRaw記録できるデジカメを何個か持っているので、それを使いました。今回テストでは、

Canon EOS 40D
Canon EOS 5D MkII
Canon EOS Kiss X
Canon Powershot G7X
Canon IXY 920 IS (CHDK)
OLYMPUS E-M10MarkII
Panasonic DMC-GM1
iPhone SE (RAWカメラ)

 で試しましたが、いずれも展開できました。かなり汎用性高そうです。このIXYでのRAW撮影ですが、以前の

 で改造したカメラを使ってます。このrawデータも現像できました。

 とはいえ、手っ取り早い素材はスマホでしょうね。もともとスマホでカジュアルに撮った写真をいかに良くするかが最初の動機なので。iPhoneに”RAWカメラ“というソフトを入れてみましたが、こいつで撮影したデータも問題なく展開できました。展開すると、以前観察したようなノイズ除去がばっちり入った画像ではなく、ノイジーな、それこそ生の画像データがとれています。ノイズ除去処理のキャンセルはできそうです。

 このiPhoneの”RAWカメラ”ですが、10枚撮影すると1回宣伝が入ります。まぁしょうがないです。お金を払うと表示されなくなるので、煩わしい方は気持ちよく払ってしまいましょう。私は払わず遊んでます…。

 残念ながら連写機能がありません。以前の記事で紹介したような連写画像からのノイズ除去がうまく行くかどうか、やってみないとわかりません。

スポンサーリンク

テストコード

 単純なパラメータで現像させてみましょう。

import rawpy
import cv2

raw = rawpy.imread('CRW_9939.DNG')
decoded = raw.postprocess(use_camera_wb=True)[:, :, [2, 1, 0]]
cv2.imshow("window",decoded)

 OpenCVが相変わらずのBGR順なので、現像した画像をBGR順に直しています。これでもっともらしい画像が表示されればOKとします。というかこれで現像できてしまうのだから便利ですね。

 ここで読み込んだrawからいろいろな情報もとれそうです。この取れた情報をもとに、現像パラメータを決めて、画像化するという作業になります。

 このpostprocessが大量の引数を要求しています。もちろんデフォルトでもそれっぽく動くのですが、これを写真毎に最適化してあげる必要があります。

 追記:このpostprocessの処理予測を一通りまとめました。引数の詳細もこちらに載せましたので、併せてみていただければと思います。

 イテレーションが大量に発生します。都度保存して確認ではお話になりません。以前作成したビューアーにこのrawデコード機能を持たせ、パラメータを決めて行こうと思います。

まとめ

 ひとまずRAWデータのカジュアル現像を目指して、お手軽にrawpyを使って現像を体験してみました。

 当然メーカー純正のRAW現像ソフトのように、レンズの幾何補正やら、収差の補正、周辺光量の補正等の補正はできないです。デモザイキングやノイズ除去にはオプションがあるようです。トーン調整もできそうですが、ハイライトだけ、ダーク部だけ、といったようなかゆいところは、真面目な現像ソフトにかいてもらいましょう。

 本気で現像させようと思ったら、デモザイキングから手動。というのも手としてはアリのようですが、今回はそこまでは手を出さないことにします。楽しそうですが、抜け出せなくなりそうなので。

 次からは一つ一つ現像パラメータを眺めてみて、その変化の具合を試してみようと思います。

追記

LibRaw 0.21 supported cameras | LibRaw

ここを見るとrawpyの実体でもあるlibrawのサポートカメラ一覧が見られるようです。ココでサポートしてればrawpyでも開くと思われます。バージョン次第ですが。

python現像
スポンサーリンク
キャンプ工学

コメント

タイトルとURLをコピーしました