- •Міністерство освіти і науки україни
- •Теоретический материал Яркость точки и гистограммы изображения.
- •Изменения яркости и контрастности
- •Изменение цветности (бинаризация, оттенки серого, негатив).
- •Наложение шума
- •Фильтрация
- •Методы выделения границ
- •Шумоподавляющая фильтрация
- •Требования к программе курсовой работы по дисциплине «Обработка сигналов и изображений»
Наложение шума
Речь пойдёт, в основном, о фильтрах шумоподавления, но для того, чтобы можно было быстрее и нагляднее оценивать их работу, требуется реализовать ещё и возможность искусственного зашумления изображения.
В курсовой работе необходимо реализовать наложение трех видов шумов на изображение: аддитивного, мультипликативного и импульсного. Перед их рассмотрением необходимо знать, что выходное значение яркости необходимо корректировать при выходе его за границы 0...255. В примерах коррекция будет выполняться при помощи функции, описанной в пункте «Изменение яркости и контрастности»
Смысл аддитивного шума заключается в увеличении яркости или значения цвета пикселя на некоторую небольшую величину, значение которой должно быть различным (случайным) для каждой следующей точки. Рассмотрим следующий пример наложения аддитивного шума, в котором значения цвета некоторого количества точек будут изменены на величину ±40:
Bitmap rezultImage = new Bitmap(bmp);
int i, x, y, n;
int R, G, B;
Random rand = new Random();
//Формируем количество зашумленных пикселей
n = rand.Next(bmp.Width * 2, bmp.Width * 4);
i = 0;
while (i < n)
{
//Определяем случайное положение пикселя
x = rand.Next(0, bmp.Width);
y = rand.Next(0, bmp.Height);
//Изменяем каждую составляющую на случайное значение
R = bmp.GetPixel(x, y).R + rand.Next(-40, 40);
G = bmp.GetPixel(x, y).G + rand.Next(-40, 40);
B = bmp.GetPixel(x, y).B + rand.Next(-40, 40);
//Выполняем коррекцию цвета
R = CorrectColor(R);
G = CorrectColor(G);
B = CorrectColor(B);
//Заменяем значение цвета пикселя на зашумленное
rezultImage.SetPixel(x, y, Color.FromArgb(R, G, B));
i++;
}
Смысл мультипликативного шума заключается в умножении яркости или значения цвета пикселя на некоторую небольшую величину, значения которой близки к 1 и в каждой точке различны (случайны). Рассмотрим следующий пример наложения мультипликативного шума, в котором значения цвета некоторого количества точек будут изменены в 0.5…1.5 раза:
Bitmap rezultImage = new Bitmap(bmp);
int i, x, y, n;
int R, G, B;
Random rand = new Random(DateTime.Now.Millisecond);
//Формируем количество зашумленых пикселей
n = rand.Next(bmp.Width * 2, bmp.Width * 4);
i = 0;
while (i < n)
{
//Определяем случайное положение пикселя
x = rand.Next(0, bmp.Width);
y = rand.Next(0, bmp.Height);
//Получаем уровни RGB для пикселя
R = bmp.GetPixel(x, y).R;
G = bmp.GetPixel(x, y).G;
B = bmp.GetPixel(x, y).B;
//Умножаем каждую составляющую на случайное значение в пределах 0.5:1.5
R = (int)(R * (rand.NextDouble() + 0.5));
G = (int)(G * (rand.NextDouble() + 0.5));
B = (int)(B * (rand.NextDouble() + 0.5));
//Выполняем коррекцию цвета
R = CorrectColor(R);
G = CorrectColor(G);
B = CorrectColor(B);
//Заменяем значение цвета пикселя на зашумленное
rezultImage.SetPixel(x, y, Color.FromArgb(R, G, B));
i++;
}
Смысл импульсного шума заключается в искажении яркости или цвета пикселя настолько, что он теряет всякую информацию о своем неискаженном значении. Рассмотрим следующий пример наложения импульсного шума, в котором значения цвета некоторого цвета будут заменены новыми случайными значениями:
Bitmap rezultImage = new Bitmap(bmp);
int i, x, y, n;
int R, G, B;
Random rand = new Random(DateTime.Now.Millisecond);
//Формируем количество зашумленых пикселей
n = rand.Next(bmp.Width * 2, bmp.Width * 4);
i = 0;
while (i < n)
{
//Определяем случайное положение пикселя
x = rand.Next(0, bmp.Width);
y = rand.Next(0, bmp.Height);
//Задаем новые значения цвета для пикселя
R = rand.Next(0, 256);
G = rand.Next(0, 256);
B = rand.Next(0, 256);
//Заменяем значение цвета пикселя на искаженные
rezultImage.SetPixel(x, y, Color.FromArgb(R, G, B));
i++;
}