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

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

Программа должна открывать и сохранять изображения в формате 24-bit BMP.

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

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

Дополнительная часть задания

Следующие операции обработки изображений предлагается реализовать дополнительно:

  • Вычисление модуля градиента как корень из суммы квадратов свёрток с первой производной фильтра Гаусса по горизонтали и вертикали
  • Поворот изображения на произвольный угол с использованием билинейной интерполяции для устранения эффекта ступенчатости при повороте изображений с резкими контурами
  • Эквализация гистограммы

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

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

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

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

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

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

%programname% (input_image) (output_image) (command) [parameters...]

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

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

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


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

Горизонтальный фильтр Собеля, способ визуализации: перевод в серое и взятие модуля

Горизонтальный фильтр Собеля, способ визуализации: добавление подложки

Вертикальный фильтр Собеля

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

Инвертирование

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

Поворот на 75 градусов против часовой стрелки без билинейной интерполяцией

Поворот на 75 градусов против часовой стрелки с билинейной интерполяцией

Фильтр Превитта

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

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

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

Эквализация гистограммы (вход)

Эквализация гистограммы (результат)

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