Moiz's journal

プログラミングやFPGAなどの技術系の趣味に関するブログです

【技術書典6】「PythonとColabでできる-ゼロから作るRAW現像」を出します(書籍版/ダウンロード版)

はじめに

第六回目を迎える 技術書オンリーイベント 「技術書典6」にて『う38』のサークルbitnosにて「PythonとColabでできる-ゼロから作るRAW現像」(以下「ゼロから作るRAW現像」)を配布します。

f:id:uzusayuu:20190331124210j:plain:w300

技術書典について

公式ウェブページによる紹介は以下の通りです。

新しい技術に出会えるお祭りです。

技術書典は、いろんな技術の普及を手伝いたいとの想いではじまりました。

技術書を中心として出展者はノウハウを詰め込み、来場者はこの場にしかないおもしろい技術書をさがし求める、技術に関わる人のための場として『技術書典』を開催します。

  • 日時: 2019/04/14 (日) 11:00〜17:00 (一般参加は11時~13時のみ有料)
  • 開催場所: 池袋サンシャインシティ2F 展示ホールD(文化会館ビル2F)

配布情報

  • ブース: う38「bitnos
  • 書名:「PythonとColabでできる-ゼロから作るRAW現像」
  • フォーマット
    • 書籍版:164ページ(内12ページフルカラー+表紙含む)、予価2000円
    • PDF版:フルカラー152ページ(表紙含む)、予価1000円

書籍版の方はカラーページを含むために若干高めになってしまいましたので、特典としてPDF版ダウンロード権を添付します。

サークルbitnosについて

「う38」のサークルbitnosは低レイヤーを中心としたソフトウェアのサークルです。

今回は新刊「Local APICタイマー入門」を配布します。 以下、著者の@uchan_nosさんによる紹介です。

現代のPCにはいくつものタイマーが搭載されています。本書は現代のPCタイマーの主役であるLocal APICタイマーを中心にしつつも、ACPI PMタイマー、TSCUEFI RTCの使い方も紹介します。また、x86-64における割り込みの設定についても詳しく解説します。

他に以下の既巻も頒布します。

  • Linuxカーネルモジュール自作入門」
  • システムプログラミングハンドブック」
  • 「USB 3.0 ホストドライバ自作入門」
  • C++でできる!OS自作入門」

配布する本について

本書「ゼロから作るRAW現像」ではカメラのRAW画像現像処理をスクラッチから作成・解説します。 PythonとColabを使うので読者はブラウザだけで、Bayerデータからフルカラー画像までのカメラ画像処理を低レベルから理解し実行することができます。

内容的にはこのブログで以前書いた「ゼロから作るRAW現像」を大きく再構成してわかりやすくし、実行環境を設定のいらないColabに移したものです。 ブログでは説明が足りないところ飛んでいるところ多数ありましたが、そういった点を大きく改善しました。

目次

  • はじめに

    • この本について
    • 環境について
    • 書籍の内容について
  • 第 1 章 カメラ画像処理について

    • カメラ画像処理について
  • 第2章 基本的な処理

    • 2.1 準備
    • 2.2 簡易デモザイク処理
    • 2.3 ホワイトバランス補正
    • 2.4 ブラックレベル補正
    • 2.5 ガンマ補正
  • 第3章 重要な処理

    • 3.1 この章について
    • 3.2 線形補間デモザイク
    • 3.3 欠陥画素補正
    • 3.4 カラーマトリクス補正
    • 3.5 シェーディング補正
  • 第4章 画質を良くする処理

    • 4.1 この章について
    • 4.2 ノイズフィルター
    • 4.3 エッジ強調
    • 4.4 トーンカーブ補正
  • 第 5 章 応用編

    • 5.1 線形補間デモザイクの周波数特性
    • 5.2 高度なデモザイク処理
    • 5.3 ミラーレスカメラ(ソニーα 7-III) の RAW 現像
  • 付録 A

    • A.1 Colaboratory の簡単な使い方
    • A.2 RAW 画像の撮影方法
  • あとがき

付録は書籍版ではURLからのダウンロード方式になります。

内容プレビュー

以下、書籍からの抜粋です。購入検討のご参考にどうぞ。

f:id:uzusayuu:20190331124640p:plain:w150 f:id:uzusayuu:20190331124956p:plain:w150 f:id:uzusayuu:20190331132726p:plain:w150 f:id:uzusayuu:20190331132442p:plain:w150

ダウンロード頒布

イベントの雰囲気は何物にも代えがたいものですが一日限定イベントという事で当日来場できない方も多いかと思います。 私自身、海外在住の身のため過去五回の技術書展は参加できずはがゆい思いをしました。

そこで当日会場にいらっしゃることのできない方のために後日以下のURLでダウンロード頒布を開始する予定です。

https://moiz.booth.pm

販売開始はイベント当日夜以降の予定です。

追記

現在はBOOTHにて入手可能です。書籍+PDF版は2200円プラス送料、PDF版は1200円です。

moiz.booth.pm

最後に

委託頒布を快く引き受けてくださった@uchan_nosさんに改めて感謝します。

「低レイヤを知りたい人のための Cコンパイラ作成入門」を読んで、オレオレコンパイラを作り始めた

はじめに

表題通りですが、Rui Ueyama氏の「低レイヤを知りたい人のための Cコンパイラ作成入門」というPDF本を読んでCコンパイラ的なものを作り始めましたよ、というダラっとした内容です。

発端

ツイッター等で知ったのですが、セキュリティキャンプというイベントで、Cコンパイラを書く、というコースがあったそうです。

www.ipa.go.jp

内容については当時各所で話題になりましたし、参加者のブログなども多数書かれているようです。 たとえばこちらなど、コースの内容や雰囲気がよくわかります。

0x19f.hatenablog.com

hsjoihs.hatenablog.com

こういったものを見て、コンパイラ作成に興味を持ち始めたところ、そのセキュリティキャンプ講師のRui Ueyama氏が「低レイヤを知りたい人のための Cコンパイラ作成入門」を書かれた事を知りました。

booth.pm

PDF本は有料ですが、同内容のものがウェブページでも無料公開されています1

低レイヤを知りたい人のための Cコンパイラ作成入門

これはやるしかないだろう、という事で自分もオレオレコンパイラを書き始めました。

なお、目標はCに近い言語のコンパイラを作って見ることでコンパイラがどのようにできているか学ぶ、ということなので、Cの規格に正しく従っていない部分が多々あります。

とりあえず書いてみる

自分はコンパイラについての知識はまったくなかったのですが、PDF本の内容が懇切丁寧なので、その内容を実行するにあたってはあまり問題なくすすめる事ができました。

内容的にはまず、数字を一つ読み込んで出力するだけという、考えられる限りでもっとも単純なプログラムをアセンブラコンパイルできるだけの「コンパイラ」を作成します。次にそこに、四則演算を導入して、変数を導入し、と進んでいきます。

執筆途中とはいえ、現在公開されている記事の最後まですすむと、こんな内容のコードがコンパイルできるようになります。

a = 4;
b = 5 * 2;
a + b;

これをコンパイルして、アセンブラにかけると、示されたとおりの計算を行って、14という返り値を返す実行ファイルを生成することができます。

本の内容が丁寧なので、最初にまったく何もなかったところからここまで、意外なほと短時間でたどりつけました。

別のコンパイラ入門書をよんでみる

こうやってコンパイラを書きすすめてきたわけですが、残念ながらPDF本の内容はまだここまでしかできていません。

そこで、まず他の本を一冊読んでみることにしました。

日本語のコンパイラ作成入門の電子書籍を探していたところ、こちらの本に出くわしました。

明快入門 コンパイラ・インタプリタ開発 (林晴比古実用マスターシリーズ)

明快入門 コンパイラ・インタプリタ開発 (林晴比古実用マスターシリーズ)

この本の内容は、スタックマシンをエミュレートしたVM上で動作するCサブセットのコンパイラソースコードの解説と、その関連技術の説明です。

とりあえずこちらの内容を一通り読んで、コードを手入力して実行させてみました2

スタックマシンのエミュレータ、という点が独特ですが、最初に読んだ「低レイヤ〜」でもスタックマシン的なコードを出力していたので、わりとすんなりなじめました。

次にどうする?

ここまで来たところで元の自作コンパイラにもどったのですが、次に何をするのか途方にくれてしまいました。

そこで、セキュリティキャンプに参加した方から、Rui氏のブログでセキュリティキャンプではどのような順に実装を進めたのか書いてあると教えていただきました。

note.mu

とりあえず、こちらの方針に従って以下のように進めていくことにしました。

  1. 引数なしの関数呼び出し
  2. 引数ありの関数呼び出し
  3. 引数なしの関数定義
  4. 引数ありの関数定義
  5. グローバル変数
  6. 配列
  7. ポインタ
  8. char型
  9. 文字列リテラル
  10. 構造体
  11. #include

書くぞ、書くぞ、書くぞ

その後はひたすら実装テスト実装テスト実装テストの繰り返しです。

毎回機能を追加する度にテストを追加し、ちょっとずつちょっとずつできることが増えて、とうとう文字列リテラルのところまですすみました。

また、セキュリティキャンプの参加者の方から(ときには講師の方から)いろいろと実践的なアドバイスをいただけたのは非常に助かりました。 特に、X86-64のABIではスタックポインタは16バイトアラインされている必用がある、というのと、rbxなどはcallee save、というのは自分ではきっと絶対に気が付かないではまっていたと思います。

そんなみなさんの協力もあって、今ではこんなコードをコンパイルすることができるようになりました。

void print(int a) {
  int b, c;
  b = 1;
  while(a >= 10 * b) {
    b = b * 10;
  }
  while(b > 0) {
    putchar((c = a/ b) + 48);
    a = a - c * b;
    b = b / 10;
  }
}

void print_string(char *a) {
  while(*a) {
    putchar(*a);
    a = a + 1;
  }
}

int fib(int a) {
  if (a <= 1) {
    return a;
  }
  return fib(a-1) + fib(a-2);
}

int main() {
  int i;
  print_string("Fibonacci seriese: ");
  for(i = 0; i < 20; i = i + 1) {
    print(fib(i));
    putchar(32);
  }
  putchar(10);
  return 0;
}

このコードをコンパイルすると以下のような結果が得られます。(m99ccというのが今回作ったコンパイラ、fibonacciが上記のプログラム。)

$ ./m99cc program/fibonacci.c > tmp.s && gcc -o tmp tmp.s && ./tmp
Fibonacci seriese: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

まだまだ不完全ではありますが、ゼロから初めて2ヶ月にしてはそれなりに形になっているのではないでしょうか。改めてご協力いただいた方々に感謝します。

(まだ終わってませんが。)

リポジトリ

これまでの結果はこちらのGithubリポジトリーにアップロードしてあります。

github.com

便利な資料

コンパイラ作成中に、ここまでで紹介した以外にもいろいろ便利なリソースについて教えていただいたので、ここにまとめておきます。

セキュリティキャンプの参加者のリポジトリ

github.com

github.com

こちらのShinya Kato氏(id:mizu0x19f)とはすじょい氏(id:hsjoihs)のお二人からは別途何度も有益なアドバイスをいただきました。

オンラインコンパイラGodbolt

godbolt.org

ブラウザ上でCやその他コードをコンパイルしてアセンブラの結果が見られる便利なサイトです。

変わった名前だなと思ったら本名のようです。まさに神ツール。

セキュリティキャンプ講師のスライド

docs.google.com

セキュリティキャンプの講師をされたhikalium( id:hikalium )氏のスライドです。

hikalium氏からは他にもいろいろ教えていただきました。上記のGodboltもhikalium氏経由の情報です。

C言語規格のドラフト

http://www.iso-9899.info/n1570.html

書籍 Compilers: Principles, Techniques, and Tools 2nd By Alfred V. Aho

入門書より範囲の広い本を、と思って買ってみましたがまだ読んでいません。

Intel® 64 and IA-32 Architectures Software Developer Manuals

Intel® 64 and IA-32 Architectures Software Developer Manuals | Intel® Software

インテルCPUのマニュアルです。 読まなきゃいけないのはわかるのですが、私は個人的な事情でこの書類を見ると鬱に...。


  1. 自分は応援も兼ねてPDFの方を購入しましたが、実際に参照したのはウェブページの方です。なおまだ執筆途中ということで、掲載されている内容はまだ途中までだそうです。

  2. 実はソースコードがダウンロードできるので、こんな事をする必要はなかったのですが、ダウンロード用URLが奥付に書いてあるのに気が付かず手で入力してしまいました。

EDA Playgroundで遊んで見る

はじめに

ブラウザ上でデジタル回路設計と検証が行えるウェブページEDA Playgroundを紹介します。

https://www.edaplayground.com/

f:id:uzusayuu:20181217115012p:plain
EDA Playgroundの例の一つ(カウンター)

書いている人とEDA PlaygroundおよびDoulosとの間にはなんの関係もありません。

EDA Playgroundとは

EDA Playgroundとは、VictorEDAにより開発され、半導体回路の設計・検証のトレーニングを行うDoulosによって提供されるWebサービスです。 ブラウザ上で各種半導体デジタル設計言語による設計のシミュレーションや検証が行なえる学習用のツールです。 サポートする言語としては、Verilog HDL, System Verilog, VHDLなどがあります。

制限事項としては、

  • 一回の実行時間は60秒まで
  • モリーの使用量は100MBまで

という物があります。本格的な設計をするには心もとないですが、もともと学習用でありそういう用途に使うツールではないと思います。逆に学習用と考えると広い使いみちが考えられます。

また、特筆すべき点としてサポートする言語機能の範囲があります。 たとえばAltera製FPGAに付属するModelSim-Altera Starter EditionではSystem Verilogアサーション機能やパラメータ乱数化機能はライセンスの関係で使えません(私が使用した時点での制限であり、現在では変わっている可能性があります。) しかし、EDA Playgroundではこういった高度な機能も使用可能になっています。

EDA Playgroundでのシミュレーション

実は、Youtubeに開発者による紹介ビデオが上がっています。

www.youtube.com

ここまで説明してきてなんですが、EDA Playgroundの使い方はこのビデオを見ていただくのが一番だと思います。

そうは言っても、それだけでは寂しいのでシミュレーションの画像を紹介します。

まず、EDA Playgroundのページをブラウザで開きます。

f:id:uzusayuu:20181217122739p:plain
EDA Playgroundにアクセスした直後

まずは右上のLoginからログインしておきましょう。詳細は省きますが、EDA Playgroundのアカウントを作らなくても、Gmailfacebookのアカウントでログインできます。

次に、言語とデザインを設定します。今回は言語はデフォルトのSystem Verilog/Verilogのままにしておきます。 デザインとしては例から選んでみましょう。まず左側のコラムのExamplesからVerilog/System Verilogを選択し、出てきたリストからD flip-flopを選択します。

これでデザインとテストベンチのウィンドウが埋まるはずです。

f:id:uzusayuu:20181217123206p:plain
D-Flip Flopの例をロードしたところ。

ではシミュレーションしてみましょう。 まずあとからウェーブフォームを確認できるように、左側の"Open EPWave after run"のチェックボックスをクリックして選択しておきましょう。

f:id:uzusayuu:20181217123714p:plain
Open EPWave after runをチェック

左上のRUNボタンを押すとシミュレーションが始まります。

f:id:uzusayuu:20181217124040p:plain
シミュレーションの実行

シミュレーションが終わると、波形が表示されます。

f:id:uzusayuu:20181217123835p:plain
EPWaveによる波形の表示

以上です。簡単ですね。

最後に

半導体回路の設計を学ぼうとすると、言語や設計技法の習得以前に、コンパイラやシミュレーターや波形ビューワーなどツールの準備に手間がかかってしまいます。 開発ツールの導入は、単に技術的な点だけでも難易度が高い上に、ツールの入手も多くは有料、ないしは基板とのバンドルなどになります。 また、それでさえもライセンスによっては使用できる機能に制限があり、学びたい機能が使えないという事もよくあります。

最近ではオープンソースのツールも増えてきましたが、それらも導入が簡単とは言えません。

そういった状況が、回路設計を新たに学ぼうという方々に対する参入障壁になっているようです。

それに対してEDA Playgroundはブラウザ一個があれば誰でもデジタル回路設計のシミュレーションが始められ、機能的な制限も非常に小さい(規模的な制限あり)、という非常にありがたいものになっています。

その割に日本での知名度がそれほど高くないのが残念だったので、1ファンとして簡単ながら紹介記事を書かせていただいた次第です。

ゼロから作るRAW現像 - Colabでの実行

このブログ記事「ゼロから作るRAW現像」を大きく再構成してより読みやすくした書籍「PythonとColabでできる-ゼロから作るRAW現像」を【技術書典6】にて頒布しました。

現在はBOOTHにて入手可能です。書籍+PDF版は2200円プラス送料、PDF版は1200円です。

moiz.booth.pm

はじめに

この記事は「ゼロから作るRAW現像」という一連の記事のフォローアップです。

uzusayuu.hatenadiary.jp

ここでは、記事中紹介された内容をColab上で実行する方法を紹介します。

なお、実行にあたってGoogleアカウントが必要です。

Colabについて。

ColabはGoogleのサービスで、ウェブブラウザだけでJupyter Notebookのような機能が使える便利なサービスです。

Colab自体、また、その使い方についてはからあげ氏の以下の記事が詳しいです。

karaage.hatenadiary.jp

からあげ氏は「ゼロから作るRAW現像」の内容をColabで実行されていて、ノートブックをColab上で公開もされています1

karaage.hatenadiary.jp

公開されているノートブックはこちらです。

その1−その4

その5−その8

今回は私もgithub上のファイルをアップデートしてColabで直接実行できるようにしたので、そちらのファイルを実行する方法を紹介します。

ColabでのRAW現像の実行 - シェアされたノートブックを使用

今回まずはその1の内容をColabで実行できるようにアップデートしてシェアしました。

その1-基本的な処理

その2 - 処理のモジュール化

(その3以降の内容は今後追加します。)

まず、リンクをクリックしてノートブックを開きます。

f:id:uzusayuu:20181121161425p:plain

このままでは実行できないので、FileメニューからSave a copy in Drive...を選択して自分の環境に保存します。

f:id:uzusayuu:20181121154848p:plain

次に、RuntimeメニューからRun allを実行します。

f:id:uzusayuu:20181121155233p:plain

これで、記事の内容が実行されます。

f:id:uzusayuu:20181121155856p:plain

CobalでのRAW現像の実行 - Githubからダウンロード

Github上のファイルをColabから開いて実行することもできます。

まずColabのWEBページをブラウザで開きます。

するとファイルを開くダイアログが表示されるのでGITHUBのタブを選択します。

f:id:uzusayuu:20181121160301p:plain

URLをコピーし貼り付けます。

その1-基本的な処理

その2 - 処理のモジュール化

f:id:uzusayuu:20181121160525p:plain

ダイアログ上の虫眼鏡マークを押すとGithubからノートブックファイルがダウンロードされます。

f:id:uzusayuu:20181121160643p:plain

COPY_TO_DRIVEをクリックして自分の環境にコピーを保存します。

f:id:uzusayuu:20181121160828p:plain

RuntimeメニューからRun allを選択すると、処理が行われます。

f:id:uzusayuu:20181121161005p:plain

まとめ

以上、「ゼロから作るRAW現像」の内容をColabから実行する方法を紹介しました。

最初にColab上での実行に成功さてノートブックをシェアしていただいたからあげ氏に改めて感謝します。


  1. からあげ氏には記事のデバッグも協力していただきました。感謝します。

ゼロから作るRAW現像 - まとめページ

このブログ記事「ゼロから作るRAW現像」を大きく再構成してより読みやすくした書籍「PythonとColabでできる-ゼロから作るRAW現像」を【技術書典6】にて頒布しました。

現在はBOOTHにて入手可能です。書籍+PDF版は2200円プラス送料、PDF版は1200円です。

moiz.booth.pm

ゼロから作るRAW現像

はじめに

この一連の記事は、RAW画像現像・カメラ画像処理の内容を実際の動作レベルで解説し、なるべくスクラッチからPython上で実行してみる事を目的としています。

そのために、解説する処理は最重要なものにしぼり、使用するアルゴリズムは一部の例外(デモザイク)を除き、もっとも簡単なものを選びました1

また、使用したインプットファイル、Jupyter Notebook上の実行内容はすべてGithubで公開しています。

記事の最後ではラズベリーパイのカメラで撮影したRAW画像からこんなRGB画像が作れるようになります。

f:id:uzusayuu:20181104160132p:plain:w600

オリジナルサイズ画像はこちら

この記事で扱うもの

  • 基本的なRAW現像処理・カメラ画像処理の流れ
  • Bayer画像からRGB画像出力までの各アルゴリズムのうち、基本的な最低限のものの解説
  • 解説した基本的なアルゴリズムPythonによる実装と処理例

この記事で扱わないもの

環境について

この記事で解説する内容は一般的なものですが、使用した画像ファイルは特定のカメラに依存しています。 他のカメラでもわずかな変更で同等の処理ができるとは予想されますが、検証はしていません。

使用カメラ

なお、使用したファイルは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現像 - Colabでの実行 - Moiz's journal

記事一覧

ゼロから作るRAW現像その1 - 基本的な処理

カメラ画像処理の流れと、ごく基本的な処理について解説しています。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像その1 - 基本的な処理」で使用したファイル

ゼロから作るRAW現像 その2 - 処理のモジュール化

その1で行った処理をモジュール化し、その3以降への準備としています。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その2 - 処理のモジュール化」で使用したファイル

ゼロから作るRAW現像 その3 - デモザイク処理基本編

基本的なデモザイク処理について解説しています。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その3 - デモザイク処理基本編」で使用したファイル

ゼロから作るRAW現像 その4 - デモザイク処理応用編

比較的高性能なデモザイク処理について解説しています。 この記事だけ例外的に画像処理・信号処理についてのある程度専門的な知識を前提としています。 デモザイク内部の処理の解説なので、全体的な処理の流れをつかむのが目的の方は読み飛ばしてかまいません。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その4 - デモザイク処理応用編」で使用したファイル

ゼロから作るRAW現像 その5 - ラズベリーパイのRAW画像処理

ラズベリーパイのカメラでRAW画像を撮影し、その画像を処理をする方法を解説しています。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その5 - ラズベリーパイのRAW画像処理」で使用したファイル

ゼロから作るRAW現像 その6 - レンズシェーディング補正

レンズ/シェーディング補正(周辺減光補正)について解説しています。 地味ですが非常に重要な処理です。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その6 - レンズシェーディング補正」で使用したファイル

ゼロから作るRAW現像 その7- ノイズモデルとノイズフィルター

ノイズ測定、ノイズのモデリング、バイラテラルフィルターを使った実際のノイズ除去について解説しています。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その7- ノイズモデルとノイズフィルター」で使用したファイル

ゼロから作るRAW現像 その8- 欠陥画素、エッジ強調、コントラスト補正

最後の記事です。欠陥画素補正、エッジ強調、トーンカーブ補正について解説しています。

uzusayuu.hatenadiary.jp

「ゼロから作るRAW現像 その8- 欠陥画素、エッジ強調、コントラスト補正」で使用したファイル

ゼロから作るRAW現像 - Colabでの実行

フォローアップ記事です。

その1の内容をGoogle Colab上で実行する方法を紹介しています。

uzusayuu.hatenadiary.jp

Github リポジトリ

プロジェクトトップ

github.com


  1. こういった事情により、この記事で作成するRAW画像現像ソフトは最高の画質を目標にはしていません。