Обработка изображений. Лапласиан - 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];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д