Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        /// <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));
        }