BOGIm.Histogram.wyrownajHistogramGlobalnie C# (CSharp) Method

wyrownajHistogramGlobalnie() public method

public wyrownajHistogramGlobalnie ( int iloscKlas ) : Bitmap
iloscKlas int
return System.Drawing.Bitmap
        public Bitmap wyrownajHistogramGlobalnie(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[] 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];
            wartosciHistogramuWy3 = 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]++;

            calculate_histogram_in();

            int n = obrazWe.Width * obrazWe.Height;

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

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

            for (int i = 1; i < iloscOdcieniSzarosci; 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);

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

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

            // --- Histogram Wy ---

            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(wartosciHistogramuWy, wartosciHistogramuWy.Sum());   // wyznaczenie przedzialow w ktorych mieszcza sie odpowiednie kolory
            wartosciHistogramuWy2 = group_histo(wartosciHistogramuWy, binary_limits);                 // 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);
                }
            }

            calculate_histogram_out(obrazWy);
            mw.label1.Text = "";

            return obrazWy;
        }

Usage Example

Example #1
0
        private void globalneWyrownanieHistogramuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Histogram h = new Histogram(obrazWejsciowy, this);

            PodajIloscKlasHistogramuG pikhg = new PodajIloscKlasHistogramuG();
            pikhg.ShowDialog();

            if (PodajIloscKlasHistogramuG.operacja == true)
            {
                iloscKlasH = PodajIloscKlasHistogramuG.iloscKlas;

                obrazWyjsciowyPictureBox.Image = h.wyrownajHistogramGlobalnie(iloscKlasH);
            }
        }