Обработка изображения с использованием медианного фильтра - C#

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

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

Приветствую. Не сочтите за наглость, но может кто нибудь даст рабочий код обработки изображения с использованием медианного фильтра. Т.е. В событии button_click описание данного . Он должен срабатывать по нажатию кнопки. Загрузку и рисование освоил, а вот это не допойму. Желательно полный код для особо одаренных.

Решение задачи: «Обработка изображения с использованием медианного фильтра»

textual
Листинг программы
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Imaging;
  4.  
  5. namespace Helpers
  6. {
  7.     public static class BitmapHelper
  8.     {
  9.         struct Pixel : IEquatable<Pixel>
  10.         {
  11.            
  12. // ReSharper disable UnassignedField.Compiler
  13.             public byte Blue;
  14.             public byte Green;
  15.             public byte Red;
  16.  
  17.             public bool Equals(Pixel other)
  18.             {
  19.                 return Red == other.Red && Green == other.Green && Blue == other.Blue;
  20.             }
  21.         }
  22.  
  23.         public static Color[,] GetPixels(this Bitmap bmp)
  24.         {
  25.             return ProcessBitmap(bmp, pixel => Color.FromArgb(pixel.Red, pixel.Green, pixel.Blue));
  26.         }
  27.  
  28.         public static float[,] GetBrightness(this Bitmap bmp)
  29.         {
  30.             return ProcessBitmap(bmp, pixel => Color.FromArgb(pixel.Red, pixel.Green, pixel.Blue).GetBrightness());
  31.         }
  32.  
  33.         private static unsafe T[,] ProcessBitmap<T>(this Bitmap bitmap, Func<Pixel, T> func)
  34.         {
  35.             var lockBits = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly,
  36.                                        bitmap.PixelFormat);
  37.             int padding = lockBits.Stride - (bitmap.Width*sizeof (Pixel));
  38.  
  39.             int width = bitmap.Width;
  40.             int height = bitmap.Height;
  41.  
  42.             var result = new T[height, width];
  43.  
  44.             var ptr = (byte*) lockBits.Scan0;
  45.  
  46.             for (int i = 0; i < height; i++)
  47.             {
  48.                 for (int j = 0; j < width; j++)
  49.                 {
  50.                     var pixel = (Pixel*) ptr;
  51.                     result[i, j] = func(*pixel);
  52.                     ptr += sizeof (Pixel);
  53.                 }
  54.                 ptr += padding;
  55.             }
  56.  
  57.             bitmap.UnlockBits(lockBits);
  58.  
  59.             return result;
  60.         }
  61.     }
  62. }

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


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

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

7   голосов , оценка 3.857 из 5

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

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

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