Обработка изображения с использованием медианного фильтра - C#
Формулировка задачи:
Приветствую.
Не сочтите за наглость, но может кто нибудь даст рабочий код обработки изображения с использованием медианного фильтра.
Т.е. В событии button_click описание данного . Он должен срабатывать по нажатию кнопки. Загрузку и рисование освоил, а вот это не допойму.
Желательно полный код для особо одаренных.
Решение задачи: «Обработка изображения с использованием медианного фильтра»
textual
Листинг программы
- using System;
- using System.Drawing;
- using System.Drawing.Imaging;
- namespace Helpers
- {
- public static class BitmapHelper
- {
- struct Pixel : IEquatable<Pixel>
- {
- // ReSharper disable UnassignedField.Compiler
- public byte Blue;
- public byte Green;
- public byte Red;
- public bool Equals(Pixel other)
- {
- return Red == other.Red && Green == other.Green && Blue == other.Blue;
- }
- }
- public static Color[,] GetPixels(this Bitmap bmp)
- {
- return ProcessBitmap(bmp, pixel => Color.FromArgb(pixel.Red, pixel.Green, pixel.Blue));
- }
- public static float[,] GetBrightness(this Bitmap bmp)
- {
- return ProcessBitmap(bmp, pixel => Color.FromArgb(pixel.Red, pixel.Green, pixel.Blue).GetBrightness());
- }
- private static unsafe T[,] ProcessBitmap<T>(this Bitmap bitmap, Func<Pixel, T> func)
- {
- var lockBits = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly,
- bitmap.PixelFormat);
- int padding = lockBits.Stride - (bitmap.Width*sizeof (Pixel));
- int width = bitmap.Width;
- int height = bitmap.Height;
- var result = new T[height, width];
- var ptr = (byte*) lockBits.Scan0;
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < width; j++)
- {
- var pixel = (Pixel*) ptr;
- result[i, j] = func(*pixel);
- ptr += sizeof (Pixel);
- }
- ptr += padding;
- }
- bitmap.UnlockBits(lockBits);
- return result;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д