Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
9 / 9 / 2
Регистрация: 11.01.2013
Сообщений: 157

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

31.03.2016, 17:49. Показов 5392. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.

Не сочтите за наглость, но может кто нибудь даст рабочий код обработки изображения с использованием медианного фильтра.
Т.е. В событии button_click описание данного . Он должен срабатывать по нажатию кнопки. Загрузку и рисование освоил, а вот это не допойму.
Желательно полный код для особо одаренных.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2016, 17:49
Ответы с готовыми решениями:

Рефакторинг кода медианного фильтра черно-белого изображения
Всем привет привет. Есть такой код. Выполнял задание. Нужно было сделать медианный фильтр черно белого 2д изображения. Код работает,...

Реализация алгоритма реализации медианного фильтра с использованием LINQ
Вот задание с ресурса ulearn: "Практика «Медианный фильтр» Продолжайте в том же проекте Перед преобразованием в черно-белое, с...

Реализация медианного фильтра с применением sse2
Не знаю, на сколько это для начинающих. Но я только начинаю вникать в суть параллелизации. Суть в том, чтобы реализовать данный фильтр...

3
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
31.03.2016, 19:59
http://softwarebydefault.com/2... an-filter/

http://stackoverflow.com/quest... in-c-sharp

http://www.gutgames.com/post/N... lters.aspx
0
9 / 9 / 2
Регистрация: 11.01.2013
Сообщений: 157
01.04.2016, 10:29  [ТС]
А коментариев нет на русском?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.04.2016, 18:26
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication18
{
    class Program
    {
        static void Main(string[] args)
        {
            const int size = 11;
            for (int i = 3; i < size; i+=2)
            {
                using (var bmp = new Bitmap("source.bmp"))
                using (var result = MedianFiltering(bmp, i))
                {
                    result.Save($"output_new{i}.bmp", ImageFormat.Bmp);
                }
            }
        }
 
        private static Bitmap MedianFiltering(Bitmap source, int size)
        {
            if (size < 3)
                throw new ArgumentOutOfRangeException("size", "should be > 3");
            size |= 1;
            int padding = size/2;
            var colours = source.GetPixels();
            var resPixels = new Color[colours.GetLength(0), colours.GetLength(1)];
            for (int i = padding; i < colours.GetLength(0) - padding; i++)
            {
                for (int j = padding; j < colours.GetLength(1) - padding; j++)
                {
                    resPixels[i, j] = GetPixel(colours, i, j, size);
                }
            }
 
 
            var result = new Bitmap(source.Width, source.Height);
            for (int i = 0; i < resPixels.GetLength(0); i++)
            {
                for (int j = 0; j < resPixels.GetLength(1); j++)
                {
                    result.SetPixel(j, i, resPixels[i, j]);
                }
            }
            return result;
        }
 
        private static Color GetPixel(Color[,] colours, int i, int j, int size)
        {
            int medR = GetMedian(colours, c => c.R, i, j, size);
            int medG = GetMedian(colours, c => c.G, i, j, size);
            int medB = GetMedian(colours, c => c.B, i, j, size);
            return Color.FromArgb(medR, medG, medB);
        }
 
        private static int GetMedian(Color[,] colours, Func<Color, int> func, int i, int j, int size)
        {
            int[] result = new int[size*size];
            int index = 0;
            int diff = size/2;
            for (int x = i - diff; x <= i + diff; x++)
            {
                for (int y = j - diff; y <= j + diff; y++)
                {
                    result[index++] = func(colours[x, y]);
                }
            }
            Array.Sort(result);
            return result[result.Length/2];
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2016, 18:26
Помогаю со студенческими работами здесь

Создание фильтра для изображения
Помогите пожалуйста написать фильтр оттенок серого для изображения по клику кнопки. Изображение загружається в image.

ListView поиск по списку с использованием заданного фильтра
Такая ситуация, есть 2 листа в которых хранится информация. а в третий должны выводится данные за определёный диапозон времени, выбираем...

Задание с использованием инструмента консолидация и расширенного фильтра
Помогите, пожалуйста, выполнить задания 3, 5 и 6! Не могу даже понять, что дальше делать. P.S.Последний столбец &quot;К возврату&quot;...

Реализация преобразования Гильберта с использованием КИХ-фильтра первого порядка
У меня такой вопрос, скажите можно ли реализовать преобразование Гильберта с помощью КИХ-фильтра первого порядка? Добавлено через 1...

Ошибка при наложении программного фильтра и фильтра на форме
Добрый день, на форме программно устанавливается фильтр записей - все хорошо. но когда средствами аксесс формы дополнительно пытаешься...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru