Skip to content

RukhovichIV/CG_1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CG_1

Рухович Игорь
381808-1

Отчёт по лабораторной работе №1. Обработка изображений.

Интерфейс программы:

Полоса снизу отображает, насколько выполнена работа. Кнопка отмены позволяет мгновенно отменить применение фильтра и остановить расчёты. Иерархия меню выглядит так:

  • Файл
    • Открыть (открывает растровое изображение из файла и выводит его на экран)
    • Выбрать структурный элемент (открывает растровое изображение из файла и сохраняет его внутри в качестве структурного элемента)
    • Сохранить изображение (сохраняет растровое изображение с экрана в выбранный файл в формате .png)
  • Фильтры
    • Точечные (фильтры, вычисляющие новый цвет пикселя отдельно для каждого)
      • Инверсия
      • Серый мир
      • Идеальный отражатель
      • Линейная коррекция
      • Поворот
      • Стекло
      • Медианный фильтр
    • Матричные (фильтры, где новый цвет пикселя вычисляется с помощью умножения области пикселей вокруг на специально заданную матрицу)
      • Размытие
      • Размытие по Гауссу
      • Тиснение
      • Светящиеся края
    • Математическая морфология (операции математической морфологии; перед применением изображения приводятся к бинарным; на выходе синий = 1, белый = 0)
      • Наращивание
      • Эрозия
      • Замыкание
      • Размыкание
      • Морфологический градиент

Был создан абстрактный класс Filter, реализующий применение фильтра к изображению и содержащий:

  • Функцию protected virtual void DoPreprocessing(FastBitmap bmp), выполняющую предварительные расчеты перед проходом по изображению
  • Функцию protected abstract Color CalculateNewPixelColor(FastBitmap bmp, int x, int y), вызываемую в каждой точке изображения.

На основе этого класса были реализованы несколько точечных фильтров, а именно

  • Инверсия цветов:

  • "Серый мир":

  • Линейная коррекция:

  • Поворот на 45 градусов против часовой стрелки:

  • "Стекло":

  • Медианный фильтр. Для создания изображения берутся значения только из красного канала, для каждого пикселя берутся все значения в заданном радиусе и выбирается (за O(n)) медиана. Затем медианное значение записывается во все каналы:

Также на основе класса Filter был реализован класс MatrixFilter, с возможностью задания матрицы (в конструкторе) для расчёта нового пикселя. Были реализованы следующие матричные фильтры:

  • Размытие. Эффект практически незаметен на большом изображении:

  • Размытие по Гауссу. Эффект намного более заметен:

  • Тиснение (для более чёткой видимости к данной картинке применён фильтр линейного растяжения после тиснения):

  • Светящиеся края (выделение контуров + фильтр максимума; реализованы одним фильтром):

  • Медианный фильтр + светящиеся края. На изображении намного меньше шума, но теряются 2 других цветовых канала:

На основе класса Filter также реализован класс MorphologyFilter, применяющий к изображению операции морфологии (наращивание, эрозию и их комбинации). Для этого сначала изображение приводится к бинарному с помощью такой команды binaryImage[x, y] = col.R <= 127 && col.G <= 127 && col.B > 127, затем выполняется операция морфологии и в результате выводится изображение, где белый цвет означает false, а синий - true. Тут структурный элемент - это прямоугольник $3 \times 3$:

  • Наращивание:

  • Эрозия:

  • Размыкание (эрозия + наращивание):

  • Замыкание (наращивание + эрозия):

  • Морфологический градиент:

Также присутствует возможность выбрать структурный элемент для операций морфологии. Для этого необходимо подать на вход программе изображение в любом формате, высота и ширина которого не превышают 7 пикселей. Оно будет преобразовано к бинарному по следующему условию structElement[x, y] = color.R == 0. Лучше всего различия в структурном элементе видно при применении операции морфологического градиента:

  • Структурный элемент - прямоугольник $3 \times 3$, размеры фигуры - $3 \times 3$:

  • Структурный элемент - прямоугольник $1 \times 3$, но размеры фигуры - $3 \times 3$:

  • Структурный элемент - прямоугольник $1 \times 2$ (центральный и нижний пиксели), но размеры фигуры - $3 \times 3$:

И, напоследок, картинка, получившаяся в результате экспериментов (фильтр светящихся границ, чередующийся с тиснением). Что-то похожее на неоновую вывеску:

About

Task #1 of NNSU Computer Graphics course

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages