BOGIm.Histogram.wyrownajHistogramGlobalnie_ver2 C# (CSharp) Method

wyrownajHistogramGlobalnie_ver2() public method

public wyrownajHistogramGlobalnie_ver2 ( int iloscKlas ) : Bitmap
iloscKlas int
return System.Drawing.Bitmap
        public Bitmap wyrownajHistogramGlobalnie_ver2(int iloscKlas)
        {
            this.iloscKlas = iloscKlas;

            double[] s_hist_eq = new double[iloscOdcieniSzarosci];
            double[] sum_of_hist = new double[iloscOdcieniSzarosci];
            int[] final_eq = new int[iloscOdcieniSzarosci];
            int[] min_max = new int[2];
            int[] binary_limits = new int[iloscKlas];
            Bitmap obrazWy = new Bitmap(obrazWe.Width, obrazWe.Height);

            wartosciHistogramu = new int[iloscOdcieniSzarosci];
            wartosciHistogramuWy = new int[iloscOdcieniSzarosci];
            wartosciHistogramuWy2 = new int[iloscOdcieniSzarosci];

            for (int k1 = 0; k1 < obrazWe.Height; k1++)
                for (int k2 = 0; k2 < obrazWe.Width; k2++)
                    wartosciHistogramu[obrazWe.GetPixel(k1, k2).R]++;

            min_max = _min_max(wartosciHistogramu);

            int n = obrazWe.Width * obrazWe.Height;

            for (int i = min_max[0]; i < min_max[1]; i++)  // pdf of image
                s_hist_eq[i] = (double)wartosciHistogramu[i] / (double)n;

            sum_of_hist[min_max[0]] = s_hist_eq[min_max[0]];
            Color c;
            int t;

            for (int i = min_max[0]+1; i < min_max[1]; i++)	 // cdf of image
                sum_of_hist[i] = sum_of_hist[i - 1] + s_hist_eq[i];

            for (int i = 0; i < obrazWe.Height; i++)
            {
                for (int j = 0; j < obrazWe.Width; j++)
                {
                    c = obrazWe.GetPixel(i, j);
                    t = (int)(sum_of_hist[c.R] * 255.0);

                    t = (int)(((double)t * (double)(min_max[1] - min_max[0])) / 255.0) + min_max[0];

                    c = Color.FromArgb(t, t, t);

                    obrazWy.SetPixel(i, j, c);
                }
            }

            for (int k1 = 0; k1 < obrazWy.Height; k1++)
                for (int k2 = 0; k2 < obrazWy.Width; k2++)
                    wartosciHistogramuWy[obrazWy.GetPixel(k1, k2).R]++;

            binary_limits = binary_limits_finder_ver2(wartosciHistogramuWy, wartosciHistogramuWy.Sum(), min_max);   // wyznaczenie przedzialow w ktorych mieszcza sie odpowiednie kolory
            wartosciHistogramuWy2 = group_histo_ver2(wartosciHistogramuWy, binary_limits, min_max);                 // przesuniecie histogramow do wyznaczonych wczesniej przedzialow

            for (int i = 0; i < obrazWe.Height; i++)
            {
                for (int j = 0; j < obrazWe.Width; j++)
                {
                    c = obrazWy.GetPixel(i, j);
                    t = wartosciHistogramuWy2[c.R];

                    c = Color.FromArgb(t, t, t);

                    obrazWy.SetPixel(i, j, c);
                }
            }

            return obrazWy;
        }