ある日ふと、「画像処理ソフトをC#で作ってみたいなー」と思いました。
これといった明確な理由とかきっかけはないのですが、なんとなくC#のスキルを向上させたかったし、画像処理についても学ぶことが多いかなと思って作ることに決めました。
作るモノ
ベイヤー配列のRAW画像を入力してカラー画像を生成し、UIからスライダーなどでコントラスト調整したり、その他画像処理をかけたりするRAW現像ソフトを作ります。
ええ、Adobe Lightroomのようなね・・・
とはいっても100年かかってもAdobeには敵わないのでそこまでのクオリティは目指しませんが、なるべく近づけるように頑張っていきます。
目的
実用するためのソフトを作りたい!というよりは、プログラミングの勉強をすることが主な目的です。
現像ソフトはAdobe様がLightroomという素晴らしいソフトを出してくれていますから・・・
今までmatlabで画像処理の検討をしたり、verilogでFPGAに実装した経験はあったけれど、ソフトでUIから画像処理をするようなシステムを作った事がありませんでした。
やっぱソフトも書けるようになるべきでしょうという事で、勉強のテーマとして画像処理を挙げました。
コーディングスキル
僕はハードウェアエンジニアなので、業務でソフトを書くことはあまりありません。
関数型言語のプログラミングに関しては完全に初心者です。
マイコンのプログラムをCで書いたりとか、ハードウェアを制御するソフトをC#で作った経験はありますが、スムーズにコーディングができるほどのスキルはありません。
画像処理のプログラムをちゃんと作るのもこれが初めてです。
WPFで作る
C#のコーディングもままならないのに、なぜか余計に難易度を上げてWPFで作ってみようと思います。
WPFを使う理由は、単純にカッコいいUIを作れるからという事と、レスポンシブなUIにできるからです。
WinFormの方が100倍楽なことは承知なのですが、どうしても一ひねり加えたくなってしまうもので・・・
画像処理はフルスクラッチで作る
これは絶対に崩さないスタンスで行こうと思います。
画像処理は一切ライブラリを使わず、フルスクラッチで書きます。
コーディングスキルの低い僕が書くよりも、ライブラリなどを使ったほうが便利で早く実装できるし、処理速度も速いかもしれないけど、それでは勉強になりません。
最初は愚直なコードから始めて、どうやったら速くなるかとか、そんなことをあれこれ考えて作っていきたいと思います。
まぁ、なんとかなるでしょう。
さぁ、打倒Adobeの日々スタートです!笑