このブログ記事「ゼロから作るRAW現像」を大きく再構成してより読みやすくした書籍「PythonとColabでできる-ゼロから作るRAW現像」を【技術書典6】にて頒布しました。
現在はBOOTHにて入手可能です。書籍+PDF版は2200円プラス送料、PDF版は1200円です。
- ゼロから作るRAW現像
- 記事一覧
- Github リポジトリー
ゼロから作るRAW現像
はじめに
この一連の記事は、RAW画像現像・カメラ画像処理の内容を実際の動作レベルで解説し、なるべくスクラッチからPython上で実行してみる事を目的としています。
そのために、解説する処理は最重要なものにしぼり、使用するアルゴリズムは一部の例外(デモザイク)を除き、もっとも簡単なものを選びました1。
また、使用したインプットファイル、Jupyter Notebook上の実行内容はすべてGithubで公開しています。
記事の最後ではラズベリーパイのカメラで撮影したRAW画像からこんなRGB画像が作れるようになります。
この記事で扱うもの
この記事で扱わないもの
- 3A(オートフォーカス、オートホワイトバランス、オート露出)などを始めとするカメラコントロールアルゴリズム
- 高度なカメラ画像処理アルゴリズム
- 画像評価、カリブレーション、及びチューニング(ただし、記事の解説上最低限必要なものを除く)
- 画像圧縮
環境について
この記事で解説する内容は一般的なものですが、使用した画像ファイルは特定のカメラに依存しています。 他のカメラでもわずかな変更で同等の処理ができるとは予想されますが、検証はしていません。
使用カメラ
- Sony Alpha 7 III
- Raspberry Pi Camera v2.1
なお、使用したファイルはGithubからダウンロードできるので、これらのカメラをお持ちでなくても、紹介した処理の内容を実行することは可能です。
実行環境
この内容を再現するには通常のPC環境に加えて以下の環境が必用です。
python3が実行でき、以下のライブラリがインストールされた環境
- rawpy
- numpy
- scipy
- matplotlib
- imageio
exiftool
exiftoolは必須ではありませんが、あれば記事の内容を再現するのが容易になります。
Jupyter Notebookまたは他のPython対話ツール
なお、後半の内容を実行するには比較的大きめなRAM必要なようです。 はっきりと何GB必要というのは環境に依存するので難しいですが、16GB以上あった方が良さそうです。
また、一連の内容は僅かな変更でGoogle Colabでも実行可能なようです。 実際@karaage0703氏が、この記事の内容をcolabで実行したものをシェアされています。
また、私の公開しているファイルでもその1およびその2に関してのみノートブックをColabに対応させてあります。
Colabでの実行方法についてはこちらを参照ください。
記事一覧
ゼロから作るRAW現像その1 - 基本的な処理
カメラ画像処理の流れと、ごく基本的な処理について解説しています。
「ゼロから作るRAW現像その1 - 基本的な処理」で使用したファイル
サンプルRAWデータ: raw_process/sample.ARW at master · moizumi99/raw_process · GitHub
紹介した処理の内容を含むJupyter Notebook ファイル: raw_process/part1_ISP_Basic_Process.ipynb at master · moizumi99/raw_process · GitHub
出力PNG画像: raw_process/sample.png at master · moizumi99/raw_process · GitHub
Google Colab Notebook: part1 Basic ISP Process
ゼロから作るRAW現像 その2 - 処理のモジュール化
その1で行った処理をモジュール化し、その3以降への準備としています。
「ゼロから作るRAW現像 その2 - 処理のモジュール化」で使用したファイル
その1の内容をモジュール化したPythonファイル: raw_process/raw_process.py at master · moizumi99/raw_process · GitHub
モジュールを利用したRAW現像デモ: raw_process/part2_isp_basic_process_with_module.ipynb at master · moizumi99/raw_process · GitHub
Google Colab Notebook: part2 Basic ISP Process
ゼロから作るRAW現像 その3 - デモザイク処理基本編
基本的なデモザイク処理について解説しています。
「ゼロから作るRAW現像 その3 - デモザイク処理基本編」で使用したファイル
入力画像(解像度チャート): raw_process/sample2.ARW at master · moizumi99/raw_process · GitHub
シンプルなデモザイク解説コード: raw_process/Simple_Demosaic.ipynb at master · moizumi99/raw_process · GitHub
出力画像: raw_process/sample2.png at master · moizumi99/raw_process · GitHub
デモザイクを含んだPythonモジュールファイル: raw_process/raw_process2.py at master · moizumi99/raw_process · GitHub
ゼロから作るRAW現像 その4 - デモザイク処理応用編
比較的高性能なデモザイク処理について解説しています。 この記事だけ例外的に画像処理・信号処理についてのある程度専門的な知識を前提としています。 デモザイク内部の処理の解説なので、全体的な処理の流れをつかむのが目的の方は読み飛ばしてかまいません。
「ゼロから作るRAW現像 その4 - デモザイク処理応用編」で使用したファイル
入力画像(解像度チャート): raw_process/sample2.ARW at master · moizumi99/raw_process · GitHub
高速版Pythonモジュールファイル: raw_process/raw_process3.py at master · moizumi99/raw_process · GitHub
高速版Pythonモジュールファイルのデモ: raw_process/ISP_Basic_Process_with_Module_raw_process3.ipynb at master · moizumi99/raw_process · GitHub
デモザイク処理応用編の内容を含むJupyter Notebook ファイル: raw_process/AdvancedDemosaickingDemo.ipynb at master · moizumi99/raw_process · GitHub
出力結果: raw_process/advanced_demosaic.png at master · moizumi99/raw_process · GitHub
ゼロから作るRAW現像 その5 - ラズベリーパイのRAW画像処理
ラズベリーパイのカメラでRAW画像を撮影し、その画像を処理をする方法を解説しています。
「ゼロから作るRAW現像 その5 - ラズベリーパイのRAW画像処理」で使用したファイル
入力画像(RAWデータを含んだJPEGファイル): raw_process/raw_capture.jpg at master · moizumi99/raw_process · GitHub
ラズベリーパイRAW画像の処理(Jupyter Notebook): raw_process/Raspberry_Pi_RAW.ipynb at master · moizumi99/raw_process · GitHub
出力画像: raw_process/raspi_raw_out.png at master · moizumi99/raw_process · GitHub
ゼロから作るRAW現像 その6 - レンズシェーディング補正
レンズ/シェーディング補正(周辺減光補正)について解説しています。 地味ですが非常に重要な処理です。
「ゼロから作るRAW現像 その6 - レンズシェーディング補正」で使用したファイル
フラット画像: raw_process/flat.jpg at master · moizumi99/raw_process · GitHub
シェーディング量の測定: raw_process/LensShadingCorrection.ipynb at master · moizumi99/raw_process · GitHub
サンプルカラーチャート: raw_process/color_chart.jpg at master · moizumi99/raw_process · GitHub
入力画像(解像度チャート): raw_process/chart.jpg at master · moizumi99/raw_process · GitHub
レンズシェーディング処理: raw_process/Raspberry_Pi_RAW_LensShadingCorrection.ipynb at master · moizumi99/raw_process · GitHub
出力画像: raw_process/chart_with_shading_correction.png at master · moizumi99/raw_process · GitHub
ゼロから作るRAW現像 その7- ノイズモデルとノイズフィルター
ノイズ測定、ノイズのモデリング、バイラテラルフィルターを使った実際のノイズ除去について解説しています。
「ゼロから作るRAW現像 その7- ノイズモデルとノイズフィルター」で使用したファイル
入力画像(解像度チャート): raw_process/chart.jpg at master · moizumi99/raw_process · GitHub
処理内容(ノイズ): raw_process/Raspberry_Pi_Noise.ipynb at master · moizumi99/raw_process · GitHub
出力画像: raw_process/raspi_filtered_out.png at master · moizumi99/raw_process · GitHub
ゼロから作るRAW現像 その8- 欠陥画素、エッジ強調、コントラスト補正
最後の記事です。欠陥画素補正、エッジ強調、トーンカーブ補正について解説しています。
「ゼロから作るRAW現像 その8- 欠陥画素、エッジ強調、コントラスト補正」で使用したファイル
入力画像(解像度チャート): raw_process/chart.jpg at master · moizumi99/raw_process · GitHub
処理内容(欠陥画素、エッジ強調、トーンカーブ補正): raw_process/part_8_sharpening.ipynb at master · moizumi99/raw_process · GitHub
出力画像: raw_process/part_8_sharpening.ipynb at master · moizumi99/raw_process · GitHub
ゼロから作るRAW現像 - Colabでの実行
フォローアップ記事です。
その1の内容をGoogle Colab上で実行する方法を紹介しています。
Github リポジトリー
プロジェクトトップ
-
こういった事情により、この記事で作成するRAW画像現像ソフトは最高の画質を目標にはしていません。↩