C#で画像をWavelet変換 Accord.NET
C#で画像のWavelet変換を行う.コンピュータビジョン等の.NET向けのオープンソースのライブラリであるAccord.NET Frameworkを使う.
Accord.NETのインストール
NuGet経由でインストール可能.プロジェクトを右クリックして「NuGetパッケージの管理」を選択する.オンラインから「Accord.Imaging」を検索・インストール.
WaveletTransformクラス
Accord.NETのWaveletTransformクラスによってWavelet変換を行える.入力画像はグレースケールで,解像度が2のべき乗でないといけない.
ソースコード
WaveletTransformクラスの初期化時にWavelet母関数を指定する.その引数でWavelet変換のレベルを指定できる.ここではHaar関数でレベル2とした.
// 入力画像 var img = new Bitmap(@"Penguins.jpg"); // 画像の解像度が2のべき乗になるように調整 var bitWidth = Convert.ToString(img.Width - 1, 2).Length; var bitHeight = Convert.ToString(img.Height - 1, 2).Length; var width = (int)Math.Pow(2, bitWidth); var height = (int)Math.Pow(2, bitHeight); // 隙間の部分はゼロ埋め var imgPadded = new Bitmap(width, height, img.PixelFormat); var graphics = Graphics.FromImage(imgPadded); graphics.DrawImage(img, 0, 0); graphics.Dispose(); // グレースケール化 var gray = new AForge.Imaging.Filters.Grayscale(0.2125, 0.7154, 0.0721).Apply(imgPadded); // Wavelet変換クラスの作成 // Harrクラスの初期化時にレベルを指定出来る var wavelet = new Accord.Imaging.Filters.WaveletTransform(new Accord.Math.Wavelets.Haar(2)); // Wavelet変換 var imgWavelet = wavelet.Apply(gray); pictureBox1.Image = imgWavelet;
結果
逆変換
WaveletTransformクラスのBackwordプロパティをtrueにしてApplyメソッドを実行すると逆変換が出来る.
wavelet.Backward = true;
var gyaku = wavelet.Apply(imgWavelet);