예제 #1
0
        } //****************************** end Open image ****************************************

        private void button4_Click(object sender, EventArgs e) // Segment
        {
            if (ORIG == false)
            {
                MessageBox.Show("Please click to 'Open image' and open an image");
                return;
            }

            SegmentIm = new CImage(width, height, 8);
            for (int light = 0; light < 256; light++)
            {
                SegmentIm.Palette[light] = Color.FromArgb(light, light, light);
            }
            SegmentIm.nLoop     = 2;
            SegmentIm.denomProg = denomProg;
            if (OrigIm.N_Bits == 24)
            {
                SegmentIm.ColorToGray(OrigIm, this);
            }
            else
            {
                SegmentIm.Copy(OrigIm);
            }
            byte gw = OrigIm.Grid[5];

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    SegmentIm.Grid[x + width * y] /= 24;
                    SegmentIm.Grid[x + width * y] *= 24;
                }
            }
            SegmentBmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            ImageToBitmap(SegmentBmp, SegmentIm);
            label2.Text            = "   Segmented image   ";
            label2.Visible         = true;
            button2.Visible        = true;
            label4.Visible         = true;
            label5.Visible         = true;
            numericUpDown1.Visible = true;
            numericUpDown2.Visible = true;
            label6.Text            = "Click 'Impulse noise'";
            pictureBox2.Image      = SegmentBmp;
            progressBar1.Visible   = false;
            SEGMENT = true;
            IMPULSE = false;
            BREAD   = false;
            ROOT    = false;
        } //****************************** end Segment ****************************************
예제 #2
0
        } //****************************** end Segment ****************************************

        private void button2_Click(object sender, EventArgs e) // Impulse noise
        {
            if (ORIG == false)
            {
                MessageBox.Show("Please click to 'Open image' and open an image");
                return;
            }

            if (SEGMENT == false)
            {
                MessageBox.Show("Please click to 'Segment' to segment the image");
                return;
            }

            int nbit, nbyte;

            nbit = 8; nbyte = 1;
            progressBar1.Visible = true;
            progressBar1.Value   = 0;

            for (int light = 0; light < 256; light++)
            {
                ImpulseIm.Palette[light] = Color.FromArgb(light, light, light);
            }

            ImpulseIm.Copy(SegmentIm);
            nLoop             = 5;
            ImpulseIm.nLoop   = nLoop;
            progressBar1.Step = 1;

            ImpulseIm.DeleteBit0(nbyte);

            // "histo" is necessary for the constructor of CPnoise before "Sort".
            int MaxGV, MinGV;

            int[] histo = new int[256];
            for (int i = 0; i < 256; i++)
            {
                histo[i] = 0;
            }

            int i1 = nLoop * width * height / denomProg;

            if (nbit == 24)
            {
                int lum;
                for (int i = 0; i < width * height; i++)
                {
                    if (i % i1 == 0)
                    {
                        progressBar1.PerformStep();
                    }
                    lum = (int)ImpulseIm.MaxC(ImpulseIm.Grid[3 * i + 2],
                                              ImpulseIm.Grid[3 * i + 1], ImpulseIm.Grid[3 * i + 0]);
                    histo[lum]++;
                }
            }
            else
            {
                for (int i = 0; i < width * height; i++)
                {
                    if (i % i1 == 0)
                    {
                        progressBar1.PerformStep();
                    }
                    histo[ImpulseIm.Grid[i] & 252]++;
                }
            }

            for (MaxGV = 255; MaxGV > 0; MaxGV--)
            {
                if (histo[MaxGV] != 0)
                {
                    break;
                }
            }
            for (MinGV = 0; MinGV < 256; MinGV++)
            {
                if (histo[MinGV] != 0)
                {
                    break;
                }
            }

            CPnoise PN = new CPnoise(histo, 1000, 4000);

            PN.Sort(ImpulseIm, histo, this);

            int MADS = (int)numericUpDown1.Value;
            int MALS = (int)numericUpDown2.Value;

            progressBar1.Step = 2;

            PN.DarkNoise(ref ImpulseIm, MinGV, MaxGV, MADS, this);

            ImpulseIm.DeleteBit0(nbyte);

            PN.LightNoise(ref ImpulseIm, MinGV, MaxGV, MALS, this);

            for (int i = 0; i < nbyte * width * height; i++)
            {
                if ((ImpulseIm.Grid[i] & 3) != 3)
                {
                    ImpulseIm.Grid[i] |= 3;
                }
            }

            ImpulseBmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            ImageToBitmapOld(ImpulseBmp, ImpulseIm);
            progressBar1.Visible = false;
            pictureBox2.Image    = ImpulseBmp;
            label2.Text          = "Impulse noise suppressed";
            button3.Visible      = true;
            button8.Visible      = true;
            button5.Visible      = true;
            button6.Visible      = true;
            label6.Text          = "Click 'Breadth First' or 'Root method'";

            IMPULSE = true;
            BREAD   = false;
            ROOT    = false;
        } //****************************** end Impulse noise ****************************************