Обязательная часть задания
Должна быть разработана программа, реализующая основные алгоритмы фильтрации изображения и метрики:
- Медианная фильтрация изображения
- Фильтр Гаусса
- Билатеральная фильтрация
- Метрика 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 |
Значение 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 |
Справочные материалы