/// <summary> /// 画像に平均化フィルタを適用 /// </summary> /// <param name="sourceImage">画像の2次元配列</param> /// <param name="filterSize">フィルタのサイズ</param> /// <returns>フィルタ適用後の画像の2次元配列</returns> public static byte[,] ApplyAveragingFilter(byte[,] sourceImage, int filterSize) { Debug.Assert(filterSize % 2 == 1); double[,] filter = new double[filterSize, filterSize]; for (int m = 0; m < filterSize; ++m) { for (int n = 0; n < filterSize; ++n) { filter[m, n] = 1.0 / (filterSize * filterSize); } } return(ImageFiltering.ApplyFilter(sourceImage, filter)); }
/// <summary> /// 画像にガウシアンフィルタを適用 /// </summary> /// <param name="sourceImage">画像の2次元配列</param> /// <param name="filterSize">フィルタのサイズ</param> /// <param name="standardDeviation">ガウス分布の標準偏差</param> /// <returns>フィルタ適用後の画像の2次元配列</returns> public static byte[,] ApplyGaussianFilter(byte[,] sourceImage, int filterSize, double standardDeviation) { Debug.Assert(filterSize % 2 == 1); double[,] filter = new double[filterSize, filterSize]; // ガウシアンフィルタを作成 for (int m = 0; m < filterSize; ++m) { for (int n = 0; n < filterSize; ++n) { double r = Math.Pow(m - (filterSize / 2), 2.0) + Math.Pow(n - (filterSize / 2), 2.0); filter[m, n] = Math.Exp(-r / (2.0 * Math.Pow(standardDeviation, 2.0))); } } // フィルタの各要素の合計値が1となるように正規化 ImageFiltering.NormalizeFilter(filter); return(ImageFiltering.ApplyFilter(sourceImage, filter)); }
/// <summary> /// 画像に鮮鋭化フィルタを適用 /// </summary> /// <param name="sourceImage">画像の2次元配列</param> /// <param name="filterSize">フィルタのサイズ</param> /// <param name="k">鮮鋭化フィルタのパラメータ</param> /// <returns>フィルタを適用した画像の2次元配列</returns> public static byte[,] ApplySharpeningFilter(byte[,] sourceImage, int filterSize, double k) { Debug.Assert(filterSize % 2 == 1); double[,] filter = new double[filterSize, filterSize]; for (int m = 0; m < filterSize; ++m) { for (int n = 0; n < filterSize; ++n) { if (m == filterSize / 2 && n == filterSize / 2) { filter[m, n] = 1.0 + k * ((filterSize * filterSize) - 1) / (filterSize * filterSize); } else { filter[m, n] = -k / (filterSize * filterSize); } } } return(ImageFiltering.ApplyFilter(sourceImage, filter)); }