- •Міністерство освіти і науки україни
- •Теоретический материал Яркость точки и гистограммы изображения.
- •Изменения яркости и контрастности
- •Изменение цветности (бинаризация, оттенки серого, негатив).
- •Наложение шума
- •Фильтрация
- •Методы выделения границ
- •Шумоподавляющая фильтрация
- •Требования к программе курсовой работы по дисциплине «Обработка сигналов и изображений»
Изменение цветности (бинаризация, оттенки серого, негатив).
Под изменением цветности здесь понимается изменение спектра цветов, используемых в изображении. Минимальное, что нужно сделать в курсовой работе – бинаризация, оттенки серого и негатив, поэтому о них и поговорим.
Бинаризация – это преобразование изображения, в общем случае, к одноцветному (чаще всего к черно-белому). В терминах Photoshop это ещё называется «по уровню 50%», так как при этом выбирается некий порог (например, посередине), все значения ниже которого превращаются в цвет фона, а выше – в основной цвет. Само преобразование можно осуществлять по каналам, но в этом случае результирующее изображение не будет в прямом смысле бинарным (чёрно-белым), а будет содержать 8 чистых цветов, представляющих собой комбинации чистых красного, зелёного и голубого цветов, то есть будет бинарным по каналам. Поэтому лучше проводить преобразование над «полным» цветом точки.
Бинаризация будет выглядеть примерно так:
object Binary(Bitmap bmp)
{
DetectObject = new bool[bmp.Width, bmp.Height];
Bitmap rezultImage = new Bitmap(bmp);
int value;
double Bright;
value = 150; //Для примера выбираем порог, равный 150 (уровень яркости, по которому будет производиться бинарное преобразование)
int i, j;
for (i = 0; i < rezultImage.Width; i++)
{
for (j = 0; j < rezultImage.Height; j++)
{
//Получаем уровень яркости для преобразуемого пикселя
Bright = 0.3 * rezultImage.GetPixel(i, j).R + 0.59 * rezultImage.GetPixel(i, j).G + 0.11 * rezultImage.GetPixel(i, j).B;
if ((int)Bright > value)
{
//Если яркость пикселя больше порогового значения
//Заполняем его белым цветом и сохраняем значение логической матрицы
rezultImage.SetPixel(i, j, Color.White);
DetectObject[i, j] = false;
}
else
{
//Если яркость пикселя меньше порогового значения
//Заполняем его черным цветом и сохраняем значение логической матрицы
rezultImage.SetPixel(i, j, Color.Black);
DetectObject[i, j] = true;
}
}
}
return rezultImage;
}
В обычном случае логическая матрица при бинаризации не используется и ее объявление и заполнение можно опустить. Эта матрица широко используется при выделении границ методом жука.
Преобразование к оттенкам серого заключается в получении яркости каждой точки по известной формуле (Y=0.3*R+0.59*G+0.11*B) и последующем копировании полученного значения по все три канала (R=G=B=Y).
Это будет выглядеть так:
object GrayScale(Bitmap bmp)
{
Bitmap rezultImage = new Bitmap(bmp);
int i, j;
int Gray;
for (i = 0; i < bmp.Width; i++)
{
for (j = 0; j < bmp.Height; j++)
{
Gray = (int)(0.3 * bmp.GetPixel(i, j).R + 0.59 * bmp.GetPixel(i, j).G + 0.11 * bmp.GetPixel(i, j).B);
rezultImage.SetPixel(i, j, Color.FromArgb(Gray, Gray, Gray));
}
}
return rezultImage;
}
И, наконец, негатив получается простой заменой значения каждого канала на его дополнение до 255 (например, R=255-R).