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