Задание 1: Основы работы с изображениями

Обязательная часть задания

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

  • Отражение изображения по вертикали и по горизонтали
  • Поворот изображений по и против часовой стрелки на произвольное число градусов, кратное 90
  • Фильтр Собеля
  • Медианная фильтрация с квадратным окном произвольного размера
  • Свёртка с фильтром Гаусса с произвольным выбором параметра — радиуса σ
  • Вычисление модуля градиента как корень из суммы квадратов свёрток с первой производной фильтра Гаусса по горизонтали и вертикали

Требования

  • Недопустимо для вычисления отражений и поворотов использовать библиотечный функционал.
  • При реализации фильтра Собеля для визуализации отрицательных значений к каждому пискелю должно быть добавлено значение 128. При выходе значений за пределы диапазона [0, 255] они должны быть усечены до 0 или 255.
  • При вычислении модуля градиента должно быть произведено контрастирование — расширение диапазона с [0, gmax] до [0, 255], где gmax — максимальное значение модуля градиента среди всего изображения. При этом не должно быть потерь, связанных с округлением, на промежуточных этапах.
  • При вычислении сверток не должен меняться размер изображения. При обращении к пикселям, лежащим за пределами изображения, должна быть проведена экстраполяция одним из следующих способов: дублирование граничных пикселей, чёртное продолжение, нечётное продолжение.

Замечания и рекомендации

  • Возможная реализация медианного фильтра для цветных изображений: независимая обработка R, G и B каналов, либо выбор значения из окрестности, минимизирующего суммарное расстояние до остальных значений пикселей из окрестности.

Формат параметров командной строки

Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:

python main.py (command) (parameters...) (input_image) (output_image)

Список команд:

mirror {x|y}
  Отражение по горизонтали или по вертикали, в зависомсти от указанного параметра
rotate {cw|ccw} (angle) Поворот по или против часовой стрелки на заданное количество градусов, например: rotate cw 90
sobel {x|y} Фильтр Собеля, обнаруживающий горизонтальные или вертикальные контуры
median (rad) Медианная фильтрация, параметр rad — целочисленный радиус фильтра, то есть размер фильтра — квадрат со стороной (2 * rad + 1)
gauss (sigma) Фильтр Гаусса, параметр sigma — вещественный параметр фильтра
gradient (sigma) Модуль градиента

Примеры изображений


Исходное изображение

Горизонтальный фильтр Собеля

Вертикальный фильтр Собеля (изображение предварительно переведено в градации серого)

Горизонтальное отражение

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

Медианная фильтрация с радиусом 2

Фильтр Гаусса с σ=3

Модуль градиента, вычисленный с помощью свёрток с производными фильтра Гаусса с σ=1

Справочные материалы