Example #1
0
        public void Normalize()
        {
            FillGrayLevelHistogram();
            int min = FindMinimum();
            int max = FindMaximum();

            if (min == -1 || max == -1)
            {
                throw new Exception("Somthing is wrong with the image!");
            }
            int    quantityOfIntervals = max - min;
            double intervalLength      = (double)255 / quantityOfIntervals;
            double normolizedLevel     = 0;

            for (int i = 0; i < 256; i++)
            {
                Histogram[i] = 0;
            }
            for (int i = min; i <= max; i++)
            {
                Histogram[i]     = (int)normolizedLevel;
                normolizedLevel += intervalLength;
                Console.WriteLine(normolizedLevel);
            }
            for (int i = 0; i < Width; i++)
            {
                for (int j = 0; j < Height; j++)
                {
                    int   value     = Histogram[GrayLevelImage.GetPixel(i, j).R];
                    Color grayColor = Color.FromArgb(value, value, value);
                    NormalizedImage.SetPixel(i, j, grayColor);
                }
            }
        }
Example #2
0
 void FillGrayLevelHistogram()
 {
     for (int i = 0; i < Width; i++)
     {
         for (int j = 0; j < Height; j++)
         {
             Histogram[GrayLevelImage.GetPixel(i, j).R]++;
         }
     }
 }
Example #3
0
        public void Equalize()
        {
            const int k = 256;

            double[] h = new double[k];

            // Построение гистограммы
            for (int i = 0; i < k; i++)
            {
                h[i] = 0;
            }
            for (int i = 0; i < Width; i++)
            {
                for (int j = 0; j < Height; j++)
                {
                    h[GrayLevelImage.GetPixel(i, j).R]++;
                }
            }

            int size = Width * Height;

            // Номмирование гистограммы
            for (int i = 0; i < k; i++)
            {
                h[i] = h[i] / size;
            }

            // Построение гистограммы с накоплением
            for (int i = 1; i < k; i++)
            {
                h[i] = h[i - 1] + h[i];
            }

            //Равномерное распределение значений
            for (int i = 0; i < Width; i++)
            {
                for (int j = 0; j < Height; j++)
                {
                    int   value = (int)(h[GrayLevelImage.GetPixel(i, j).R] * (k - 1));
                    Color color = Color.FromArgb(value, value, value);
                    EqualizedImage.SetPixel(i, j, color);
                }
            }
        }