//l private void button6_Click(object sender, EventArgs e) { stopwatch.Reset(); stopwatch.Start(); for (int i = 0; i < OwnerForm.localImage.Width; i++) { for (int j = 0; j < OwnerForm.localImage.Height; j++) { Color color = OwnerForm.originalImage.GetPixel(i, j); double h, s, l; ModelSettingsChooser.ColorToHSL(color, out h, out s, out l); l = l + (l / 10 * trackBar6.Value); if (l > 1) { l = 1; } else if (l < 0) { l = 0; } color = ModelSettingsChooser.HSLToColor(h, s, l); OwnerForm.localImage.SetPixel(i, j, color); } } OwnerForm.updatePicturebox(); stopwatch.Stop(); timeLabel.Text = "Time taken " + stopwatch.ElapsedMilliseconds; }
public Bitmap applyMultiplicativeNoize(string colorMode, Bitmap originalImage, int noizeLevel, int kmin, int kmax, int colorChannel = 0) { Bitmap result = new Bitmap(originalImage); int noisepixel = (int)(originalImage.Width * originalImage.Height * noizeLevel / 100); int x, y, randomValue; Color color; double value1, value2, value3; //повторить для каждого пикселя на изображении в процентном отношении (т.е. noizeLevel процентов) for (int i = 0; i < noisepixel; i++) { //получаем случайный пиксель на изображении и случайное значение x = rand.Next(0, originalImage.Width); y = rand.Next(0, originalImage.Height); color = originalImage.GetPixel(x, y); randomValue = rand.Next(0, 100); if (colorMode == "RGB" || colorMode == "YUV") { if (colorChannel == 0) { value1 = getMultiplicativeAdditionalValue(color.R, kmin, kmax, "RGB"); value2 = getMultiplicativeAdditionalValue(color.G, kmin, kmax, "RGB"); value3 = getMultiplicativeAdditionalValue(color.B, kmin, kmax, "RGB"); result.SetPixel(x, y, Color.FromArgb((int)value1, (int)value2, (int)value3)); } else { //массив с цветами, нужен для RGB и YUV int[] colors = new int[3]; colors[0] = color.R; colors[1] = color.G; colors[2] = color.B; colors[colorChannel - 1] = getMultiplicativeAdditionalValue(colors[colorChannel - 1], kmin, kmax, "RGB"); result.SetPixel(x, y, Color.FromArgb(colors[0], colors[1], colors[2])); } } else if (colorMode == "HSL") { double H, S, L; ModelSettingsChooser.ColorToHSL(color, out H, out S, out L); if (colorChannel == 0) { value1 = getMultiplicativeAdditionalValue((int)H, kmin, kmax, "H"); value2 = getMultiplicativeAdditionalValue((int)(S * 100), kmin, kmax, "S"); value3 = getMultiplicativeAdditionalValue((int)(L * 100), kmin, kmax, "L"); result.SetPixel(x, y, ModelSettingsChooser.HSLToColor(value1, value2, value3)); } else if (colorChannel == 1) { value1 = getMultiplicativeAdditionalValue((int)H, kmin, kmax, "H"); result.SetPixel(x, y, ModelSettingsChooser.HSLToColor(value1, S, L)); } else if (colorChannel == 2) { value2 = getMultiplicativeAdditionalValue((int)(S * 100), kmin, kmax, "S"); result.SetPixel(x, y, ModelSettingsChooser.HSLToColor(H, value2, L)); } else if (colorChannel == 3) { value3 = getMultiplicativeAdditionalValue((int)(L * 100), kmin, kmax, "L"); result.SetPixel(x, y, ModelSettingsChooser.HSLToColor(H, S, value3)); } } else if (colorMode == "HSV") { double H, S, V; ModelSettingsChooser.ColorToHSV(color, out H, out S, out V); if (colorChannel == 0) { value1 = getMultiplicativeAdditionalValue((int)H, kmin, kmax, "H"); value2 = getMultiplicativeAdditionalValue((int)(S * 100), kmin, kmax, "S"); value3 = getMultiplicativeAdditionalValue((int)(V * 100), kmin, kmax, "V"); result.SetPixel(x, y, ModelSettingsChooser.HSVToColor(value1, value2, value3)); } else if (colorChannel == 1) { value1 = getMultiplicativeAdditionalValue((int)H, kmin, kmax, "H"); result.SetPixel(x, y, ModelSettingsChooser.HSVToColor(value1, S, V)); } else if (colorChannel == 2) { value2 = getMultiplicativeAdditionalValue((int)(S * 100), kmin, kmax, "S"); result.SetPixel(x, y, ModelSettingsChooser.HSVToColor(H, value2, V)); } else if (colorChannel == 3) { value3 = getMultiplicativeAdditionalValue((int)(V * 100), kmin, kmax, "V"); result.SetPixel(x, y, ModelSettingsChooser.HSVToColor(H, S, value3)); } } else { MessageBox.Show("Цветовой режим не известен или не определен :("); } } return(result); }
public Bitmap applyImpulseNoize(string colorMode, Bitmap originalImage, int noizeLevel, double impulseK, int colorChannel = 0) { Bitmap result = new Bitmap(originalImage); int noisepixel = (int)(originalImage.Width * originalImage.Height * noizeLevel / 100); int x, y, randomValue; Color color, tempColor; //повторить для каждого пикселя на изображении в процентном отношении (т.е. noizeLevel процентов) for (int i = 0; i < noisepixel; i++) { //получаем случайный пиксель на изображении и случайное значение x = rand.Next(0, originalImage.Width); y = rand.Next(0, originalImage.Height); color = originalImage.GetPixel(x, y); randomValue = rand.Next(0, 100); //обработка RGB и YUV #region RGB and YUV processing if (colorMode == "RGB" || colorMode == "YUV") { //массив с цветами, нужен для RGB и YUV int[] colors = new int[3]; colors[0] = color.R; colors[1] = color.G; colors[2] = color.B; //если канал - базовый (например полный RGB) if (colorChannel == 0) { if (randomValue < impulseK) { result.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } else { result.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } } else { if (randomValue < impulseK) { //зануляем соответстствующий канал colors[colorChannel - 1] = 0; result.SetPixel(x, y, Color.FromArgb(colors[0], colors[1], colors[2])); } else { colors[colorChannel - 1] = 255; result.SetPixel(x, y, Color.FromArgb(colors[0], colors[1], colors[2])); } } } #endregion rgb #region HSL and HSV else if (colorMode == "HSL") { double H, S, L; ModelSettingsChooser.ColorToHSL(color, out H, out S, out L); //All if (colorChannel == 0) { if (randomValue < impulseK) { H -= 180; S = L = 0; } else { H += 180; S = L = 1; } } //Hue else if (colorChannel == 1) { if (randomValue < impulseK) { H -= 180; } else { H += 180; } } //S else if (colorChannel == 2) { if (randomValue < impulseK) { S = 0; } else { S = 1; } } //L else if (colorChannel == 3) { if (randomValue < impulseK) { L = 0; } else { L = 1; } } H = CorrectHue(H); tempColor = ModelSettingsChooser.HSLToColor(H, S, L); result.SetPixel(x, y, tempColor); } else if (colorMode == "HSV") { double H, S, V; ModelSettingsChooser.ColorToHSV(color, out H, out S, out V); //All if (colorChannel == 0) { if (randomValue < impulseK) { H -= 180; S = V = 0; } else { H += 180; S = V = 1; } } //Hue else if (colorChannel == 1) { if (randomValue < impulseK) { H -= 180; } else { H += 180; } } //S else if (colorChannel == 2) { if (randomValue < impulseK) { S = 0; } else { S = 1; } } //L else if (colorChannel == 3) { if (randomValue < impulseK) { V = 0; } else { V = 1; } } H = CorrectHue(H); tempColor = ModelSettingsChooser.HSVToColor(H, S, V); result.SetPixel(x, y, tempColor); } #endregion else { MessageBox.Show("Цветовой режим не известен или не определен :("); } } return(result); }