Задание 1. Деконволюция

Задание в рамках курса «Вариационные методы обработки изображений».

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

Требуется написать программу, реализующую метод обращения свёртки (деконволюции) изображений через минимизацию регуляризирующего функционала. Выбор нормы невязки, стабилизатора на усмотрение студента. Рекомендуемый стабилизатор — функционал полной вариации, либо функционал полной обобщённой вариации. Рекомендуемое количество итераций — 100.

Требования к программе

  • Язык программирования: Python 3. На системе для тестирования установлен Python 3.10 с дополнительными пакетами numpy, scipy, scikit-image, opencv-python.
  • Интерфейс: программа должна поддерживать интерфейс командной строки со строгим соблюдением формата входных данных. Входные параметры при тестировании программы будут всегда корректны, валидация входных параметров не требуется.
  • Формат изображений: все входные изображения будут в формате 24-bit BMP. Сами изображения — в градациях серого, т.е. красная, зелёная и синяя компонента совпадают.
  • Допустимо и рекомендуется использовать платформенно-независимые библиотеки для чтения и сохранения изображений, для вспомогательных операций (векторные операции, свёртка), для разбора параметров командной строки.
  • Недопустимо использование библиотечных функций, решающих задачу целиком.
  • Недопустимо выполнение побочных действий, таких как создание временных файлов, ожидание ввода и отладочный вывод в консоль, открытие диалоговых окон и т.д.

Критерии оценки

Задание принимается, если качество результата выше, чем качество исходного изображения относительно эталона по метрике PSNR.

Рекомендации

При тестировании будут использоваться изображения с гауссовским шумом со стандартным отклонением в диапазоне [0, 20] и со следующими ядрами размытия: фильтр Гаусса (параметр от 0.5 до 5), круг (радиус от 0.5 до 5), а также реальные сложные ядра, возникающие при движении (motion blur). Рекомендуется самостоятельно смоделировать различные ситуации и найти оптимальные параметры в зависмости от уровня шума.

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

Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:
%programname% (input_image) (kernel) (output_image) (noise_level)
Аргументы:
input_image Имя файла — входное размытое и зашумлённое изображение
kernel Имя файла — ядро размытия, изображение
output_image Имя файла — выходное изображение
noise_level Уровень шума на входном изображении
Ядро размытия после чтения из файла должно быть нормализовано таким образом, чтобы сумма коэффициентов стала равна 1. Уровень шума — вещественное число, среднеквадратичное отклонение (корень из дисперсии), для диапазона значений пикселей [0, 255].

Примеры исходных данных и результатов

Примеры данных: ZIP. В архиве находятся исходное размытое изображение, ядро размытия, референсное изображения и пример результата.