} //****************************** 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 ****************************************
} //****************************** 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 ****************************************