Exemple #1
0
        /// <summary>
        /// foamliu, 2009/02/03, 累积灰度直方图.
        ///
        /// </summary>
        /// <param name="bmp"></param>
        /// <returns></returns>
        public static double[] CumulativeHistogram(Bitmap bmp)
        {
            int width, height;

            int[][] mat;
            ImageConvert.Bitmap2Mat(bmp, out mat, out width, out height);
            double[] cumuHist = GrayScaleImageLib.CumulativeHistogram(mat);

            return(cumuHist);
        }
Exemple #2
0
        /// <summary>
        /// foamliu, 2009/02/03, 鲁棒的(这个词好怪 -_-!!)正则化.
        /// 比如 pl=0.1, pu=0.99.
        ///
        /// </summary>
        /// <param name="mat"></param>
        public static void RobustNormalize(int[][] mat, double pl, double pu)
        {
            int width  = mat.Length;
            int height = mat[0].Length;

            // 第一遍, 取得最大最小值.

            int min = 0, max = 255;

            double[] cumuHist = GrayScaleImageLib.CumulativeHistogram(mat);

            for (int i = 0; i < 256; i++)
            {
                if (cumuHist[i] > pl)
                {
                    min = i - 1;
                    break;
                }
            }

            for (int i = 255; i >= 0; i--)
            {
                if (cumuHist[i] < pu)
                {
                    max = i + 1;
                    break;
                }
            }


            // 第二遍,归一化.

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    int grayScale = mat[x][y];
                    if (grayScale > max)
                    {
                        grayScale = max;
                    }
                    if (grayScale < min)
                    {
                        grayScale = min;
                    }
                    mat[x][y] = 255 * (grayScale - min) / (max - min);
                }
            }
        }