/// <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); }
/// <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); } } }