画像処理100本ノック
というページがあるのをご存じでしょうか?
最近の画像処理と言えば、OpenCVをPythonでやってみた!
という情報にあふれているのですが、この画像処理100本ノックでは、画像処理の処理部分はOpenCVに頼らずにベタにPythonやC++でプログラムしています。
実際、今どきは画像処理のプログラムをベタに組んだところで、車輪の再開発になるだけで意味があるのか??という意見もあろうかと思いますが、1度はやっておくと画像処理の理解が深まるので、おススメです。
そこで私も画像処理100本ノックの問題をC#で作ってみました。
ソースコードはGitHubに置いてあります。
表向きは画像処理100本ノックに沿ってプログラムしていますが、目指すところはC#だけで、そこそこ処理が速くて、OpenCVのPython版のように簡単に使えるC#の画像処理ライブラリ(ImagingDotNet)を作るのが目標です。
本気で使うとなると、エラー処理は甘いし、処理もすごく速い訳ではないので、あくまでも、C#で作る画像処理プログラムのお勉強用です。
Q.1.チャンネル入れ替え
var src = new Bitmap("Lena.bmp");
var dst = ImagingDotNet.CvtColor(src, ImagingDotNet.COLOR_BGR2RGB);
入力 | 出力 |
C# >> CvtColor.cs cvt_COLOR_BGR2RGB部分
Q.2.グレースケール化
var src = new Bitmap("Lena.bmp");
var dst = ImagingDotNet.CvtColor(src, ImagingDotNet.COLOR_BGR2GRAY);
入力 | 出力 |
C# >> CvtColor.cs cvt_COLOR_BGR2GRAY部分
Q.3.二値化
(参考)https://imagingsolution.net/imaging/binarization/
var src = new Bitmap("Lena.bmp");
var dst = (Bitmap)src.Clone();
ImagingDotNet.Threshold(src, dst, 128, 255, ImagingDotNet.THRESH_BINARY);
入力 | 出力 |
C# >> Threshold.cs
Q.4.大津の二値化
(参考)https://imagingsolution.net/imaging/discriminant-analysis-method/
var src = new Bitmap("Lena.bmp");
var gray = ImagingDotNet.CvtColor(src, ImagingDotNet.COLOR_BGR2GRAY);
var dst = (Bitmap)src.Clone();
ImagingDotNet.Threshold(gray, dst, 128, 255, ImagingDotNet.THRESH_OTSU);
入力 | 出力 |
C# >> Threshold.cs
4問やったところで、力尽きました…
100問分、問題を考えてプログラムを作成した100本ノックの著者は、ほんとスゴイ!!
← 画像処理のためのC#テクニック へ戻る
コメント