Обработка изображений. Лапласиан - C#

Узнай цену своей работы

Формулировка задачи:

Цифровая обработка изображений. Помогите найти ошибку. Сама программа работает без ошибок в отладчике(запускается, выполняется до конца), но изображение, которое сохраняется, весит всего 1000 байтов и вообще пустое. Почему-то минимальные элементы нулевые, хотя вроде как не должно так быть. Да и максимальные повторяются.
Листинг программы
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. int[,] mask = new int[,] { { 0, 1, 0 },
  4. { 1, -4, 1 },
  5. { 0, 1, 0 } };
  6. Bitmap image = new Bitmap("1.jpg"); //Основное изображение.;
  7. int imageWidth = image.Width,
  8. imageHeight = image.Height;
  9.  
  10. Bitmap result = new Bitmap(imageWidth, imageHeight);
  11. int[,] redA = new int[imageWidth,imageHeight];
  12. int[,] greenA = new int[imageWidth, imageHeight];
  13. int[,] blueA = new int[imageWidth, imageHeight];
  14. int[,] alphaA = new int[imageWidth, imageHeight];
  15. for (int i = 2; i < (imageWidth - 1); i++)
  16. for (int j = 2; j < (imageHeight - 1); j++)
  17. {
  18. int red = 0, green = 0, blue = 0, alpha = 0;
  19. for (int x = -1; x <= 1; x++)
  20. for (int y = -1; y <= 1; y++)
  21. {
  22. Color pixel = image.GetPixel(i + x, j + y);
  23. red += pixel.R - mask[x + 1, y + 1];
  24. green += pixel.G - mask[x + 1, y + 1];
  25. blue += pixel.B - mask[x + 1, y + 1];
  26. alpha += pixel.A;
  27.  
  28. }
  29. redA[i, j] = red;
  30. greenA[i, j] = green;
  31. blueA[i, j] = blue;
  32. alphaA[i, j] = alpha;
  33. }
  34. int minr = 0;
  35. int maxr = 0;
  36. int ming = 0;
  37. int maxg = 0;
  38. int minb = 0;
  39. int maxb = 0;
  40. int maxa = 0;
  41. int mina = 0;
  42. for (int i = 0; i < imageWidth-1; i++) //min and max element array color
  43. {
  44. for (int j = 0; j < imageHeight-1; j++)
  45. {
  46. //min
  47. if (minr > redA[i, j]) {minr = redA[i, j];}
  48. if (ming > greenA[i, j]) {ming = greenA[i, j];}
  49. if (minb > blueA[i, j]) {minb = blueA[i, j];}
  50. if (mina > alphaA[i, j]) {mina = alphaA[i, j];}
  51. //max
  52. if (maxr < redA[i, j]) {maxr = redA[i, j];}
  53. if (maxg < greenA[i, j]) {maxg = greenA[i, j];}
  54. if (maxb < blueA[i, j]) {maxb = blueA[i, j]; }
  55. if (maxa < alphaA[i, j]) {maxa = alphaA[i, j];}
  56. }
  57. }
  58.  
  59. for (int x = 0; x < imageWidth-1; x++) //delete min and max
  60. {
  61. for (int y = 0; y < imageHeight-1; y++)
  62. {
  63. redA[x,y] = redA[x,y] - minr;
  64. greenA[x,y] = greenA[x,y] - ming;
  65. blueA[x,y] = blueA[x,y] - minb;
  66. alphaA[x,y] = alphaA[x,y] - mina;
  67. redA[x,y] = redA[x,y]*(255/maxr);
  68. greenA[x,y] = greenA[x,y]*(255/maxr);
  69. blueA[x,y] = blueA[x,y]*(255/maxr);
  70. alphaA[x,y] = alphaA[x,y]*(255/maxr);
  71. result.SetPixel(x, y, Color.FromArgb(
  72. (int)(alphaA[x,y]),
  73. (int)(redA[x, y]),
  74. (int)(greenA[x, y]),
  75. (int)(blueA[x, y])));
  76. }
  77. }
  78.  
  79. pictureBox1.ImageLocation = "1.jpg";
  80. pictureBox2.Image = result; //Выводим.
  81. result.Save("result.jpg");
  82.  
  83. }

Решение задачи: «Обработка изображений. Лапласиан»

textual
Листинг программы
  1. red += pixel.R*mask[x + 1, y + 1];

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


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

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

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы