Обработка изображений. Лапласиан - 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];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы