Обработка изображений. Лапласиан - C#
Формулировка задачи:
Цифровая обработка изображений.
Помогите найти ошибку. Сама программа работает без ошибок в отладчике(запускается, выполняется до конца), но изображение, которое сохраняется, весит всего 1000 байтов и вообще пустое.
Почему-то минимальные элементы нулевые, хотя вроде как не должно так быть.
Да и максимальные повторяются.
Листинг программы
- private void button1_Click(object sender, EventArgs e)
- {
- int[,] mask = new int[,] { { 0, 1, 0 },
- { 1, -4, 1 },
- { 0, 1, 0 } };
- Bitmap image = new Bitmap("1.jpg"); //Основное изображение.;
- int imageWidth = image.Width,
- imageHeight = image.Height;
- Bitmap result = new Bitmap(imageWidth, imageHeight);
- int[,] redA = new int[imageWidth,imageHeight];
- int[,] greenA = new int[imageWidth, imageHeight];
- int[,] blueA = new int[imageWidth, imageHeight];
- int[,] alphaA = new int[imageWidth, imageHeight];
- for (int i = 2; i < (imageWidth - 1); i++)
- for (int j = 2; j < (imageHeight - 1); j++)
- {
- int red = 0, green = 0, blue = 0, alpha = 0;
- for (int x = -1; x <= 1; x++)
- for (int y = -1; y <= 1; y++)
- {
- Color pixel = image.GetPixel(i + x, j + y);
- red += pixel.R - mask[x + 1, y + 1];
- green += pixel.G - mask[x + 1, y + 1];
- blue += pixel.B - mask[x + 1, y + 1];
- alpha += pixel.A;
- }
- redA[i, j] = red;
- greenA[i, j] = green;
- blueA[i, j] = blue;
- alphaA[i, j] = alpha;
- }
- int minr = 0;
- int maxr = 0;
- int ming = 0;
- int maxg = 0;
- int minb = 0;
- int maxb = 0;
- int maxa = 0;
- int mina = 0;
- for (int i = 0; i < imageWidth-1; i++) //min and max element array color
- {
- for (int j = 0; j < imageHeight-1; j++)
- {
- //min
- if (minr > redA[i, j]) {minr = redA[i, j];}
- if (ming > greenA[i, j]) {ming = greenA[i, j];}
- if (minb > blueA[i, j]) {minb = blueA[i, j];}
- if (mina > alphaA[i, j]) {mina = alphaA[i, j];}
- //max
- if (maxr < redA[i, j]) {maxr = redA[i, j];}
- if (maxg < greenA[i, j]) {maxg = greenA[i, j];}
- if (maxb < blueA[i, j]) {maxb = blueA[i, j]; }
- if (maxa < alphaA[i, j]) {maxa = alphaA[i, j];}
- }
- }
- for (int x = 0; x < imageWidth-1; x++) //delete min and max
- {
- for (int y = 0; y < imageHeight-1; y++)
- {
- redA[x,y] = redA[x,y] - minr;
- greenA[x,y] = greenA[x,y] - ming;
- blueA[x,y] = blueA[x,y] - minb;
- alphaA[x,y] = alphaA[x,y] - mina;
- redA[x,y] = redA[x,y]*(255/maxr);
- greenA[x,y] = greenA[x,y]*(255/maxr);
- blueA[x,y] = blueA[x,y]*(255/maxr);
- alphaA[x,y] = alphaA[x,y]*(255/maxr);
- result.SetPixel(x, y, Color.FromArgb(
- (int)(alphaA[x,y]),
- (int)(redA[x, y]),
- (int)(greenA[x, y]),
- (int)(blueA[x, y])));
- }
- }
- pictureBox1.ImageLocation = "1.jpg";
- pictureBox2.Image = result; //Выводим.
- result.Save("result.jpg");
- }
Решение задачи: «Обработка изображений. Лапласиан»
textual
Листинг программы
- red += pixel.R*mask[x + 1, y + 1];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д