Задание 2. Фильтрация и метрики

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

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

  • Медианная фильтрация изображения
  • Фильтр Гаусса
  • Билатеральная фильтрация
  • Метрика MSE
  • Метрика PSNR
  • Метрика SSIM

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

  • Определение факта, является ли второе изображение сдвинутым и повёрнутым вариантом первого

Указания

Особое внимание должно быть уделено обработке на границах изображения, где алгоритмам фильтрации требуется обращение к пикселям, лежащим за пределами исходного изображения. В этом случае следует осуществить продолжение изображения методом дублирования ближайшего пикселя. Например, при обращении к пикселю с координатами (3, -4) стоит возвращать значение пикселя (3, 0).

При вычислении значений метрик и билатеральной фильтрации обратите внимание, что диапазон значений пикселей изображений — [0, 255]. Если вы работаете с изображениями в диапазоне [0, 1], то вам нужно соответствующим образом пересчитать значения метрик и параметров.

Билатеральная фильтрация применяется по формулам:


Ядра фильтров Гаусса и билатеральной фильтрации имеют неограниченный носитель, что делает затруднительным применение фильтров «в лоб», поэтому на практике вычисления ограничиваются некоторой окрестностью обрабатываемого пикселя. Для фильтра Гаусса и билатеральной фильтрации оптимальный радиус составляет 3σd. Использование фильтра большего размера не имеет смысла, так как вклад отсечённых коэффициентов не превышает градации интенсивности пикселя. А использование фильтра меньшего размера уже приводит к искажениями из-за потери коэффициентов.

Дополнительную часть задания предлагается делать, используя свойства преобразования Фурье:

  • Вычислить преобразование Фурье, взять амплитуду.
  • Перевести изображение спектра в полярные координаты. Центр преобразования - точка начала координат Фурье-образа, радиус преобразования - половина минимальной стороны образа. Предварительно можно применить небольшое размытие для уменьшения алиасинга.
  • Снова вычислить преобразование Фурье, взять амплитуду. Достаточно применить преобразование Фурье только к оси, соответствующей полярному углу.
  • Сравнить полученные изображения по одной из метрик. Порог определить самостоятельно, замерив значения метрики на различных тестовых картинках, аналогичных картинкам в примере.

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

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

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

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

mse (input_file_1) (input_file_2)
  Вычислить значение метрики MSE и вывести его в консоль
psnr (input_file_1) (input_file_2)
  Вычислить значение метрики PSNR и вывести его в консоль
ssim (input_file_1) (input_file_2)
  Вычислить значение метрики SSIM и вывести его в консоль
median (rad) (input_file) (output_file)
  Медианная фильтрация с окном размера (2rad+1) × (2rad+1)
gauss (sigma_d) (input_file) (output_file)
  Фильтр Гаусса с параметром σd
bilateral (sigma_d) (sigma_r) (input_file) (output_file)
  Билатеральная фильтрация с параметрами σd и σr
compare (input_file_1) (input_file_2)
  Определение, является ли второе изображения сдвинутым и повёрнутым вариантом первого, и вывод этой информации в консоль одной цифрой: 0 (не является) или 1 (является).

Значение rad — целое положительное, значения sigma_d и sigma_r — вещественные положительные. Гарантируется, что размеры изображений input_file_1 и input_file_2 совпадают.

Замечания

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

Ограничение времени на работу программы для изображения 400×300 составляет 1 минуту.

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

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


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

Фильтр Гаусса gauss 1

Фильтр Гаусса gauss 2.5

Медианная фильтрация median 1

Медианная фильтрация median 2

Медианная фильтрация median 3

Билатеральная фильтрация
bilateral 2 20

Билатеральная фильтрация
bilateral 2 50

Билатеральная фильтрация
bilateral 2 150

Билатеральная фильтрация
bilateral 4 20

Билатеральная фильтрация
bilateral 4 50

Билатеральная фильтрация
bilateral 4 150

Пример промежуточной обработки изображений для дополнительной части

Исходные изображения
Амплитуда преобразования Фурье
(для визуализации сделано логарифмическое преобразование)
Полярное преобразование спектра после предварительного размытия фильтром Гаусса с параметром σ=1
(для визуализации сделано логарифмическое преобразование)
Амплитуда преобразования Фурье полярного преобразования по вертикальной оси
(для визуализации сделано логарифмическое преобразование)

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