В рамках курса предполагается выполнение трёх практических заданий:
- Задание 1: Основы работы с изображениями. Срок выполнения: 26 октября 2017 г.
- Задание 2: Анализ изображений. Срок выполнения: 16 ноября 2017 г.
- Задание 3: Обработка и анализ изображений. Срок выполнения: 7 декабря 2017 г.
Требования к программам
- Интерфейс: программа должна поддерживать интерфейс командной строки со строгим соблюдением формата входных данных, описанном в каждом задании. Входные параметры при тестировании программы будут всегда корректны, валидация входных параметров не требуется.
- Формат изображений: все входные изображения будут в формате 24-bit BMP.
- Формат параметров: все числовые значения должны вводиться и выводиться в международном формате с точкой в качестве разделителя целой и дробной части (для использующих C# — InvariantCulture).
- Языки программирования: C/C++, C#. Использование других языков — по договорённости.
- Операционная система: проект должен быть платформенно-независимым.
- Использование сторонних библиотек: в проекте не должно быть внешних зависимостей, не разрешается использовать функциональность сторонних библиотек для работы с изображениями, за исключением чтения и записи изображений. Цель выполнения заданий заключается в закреплении материала и понимании основных методов обработки изображений.
Методика оценки
- Задание считается выполненным только при успешной проверке обязательной части задания
- Если программа некорректно обрабатывает границы изображения (не обрабатывает, либо выдаёт шум или другие неествественные результаты), то соответствующий пункт задания считается невыполненным
- Время выполнения заданий и количество попыток сдачи не ограничено, однако, за выполнение задания в срок могут начисляются дополнительные баллы
Требования к оформлению программ для сдачи
Выполненное задание должно представлять собой архив (рекомендуется: zip, rar) со следующей структурой:
Далее этот архив необходимо отправить через форму. Форма доступа при входе на сайт.
Справочные материалы
Задание 1: Основы работы с изображениями
Обязательная часть задания
Программа должна открывать и сохранять изображения в формате 24-bit BMP.
В программе должны быть реализованы следующие операции обработки изображений:
- Отражение изображения по вертикали и по горизонтали
- Поворот изображений по и против часовой стрелки на 90, 180 и 270 градусов
- Фильтр Собеля
- Медианная фильтрация с квадратным окном произвольного размера
- Свёртка с фильтром Гаусса с произвольным выбором параметра — радиуса σ с гамма-коррекцией
- Вычисление модуля градиента как корень из суммы квадратов свёрток с первой производной фильтра Гаусса по горизонтали и вертикали (без гамма-коррекции)
Дополнительная часть задания
- Поворот изображения на произвольный угол относительно центра изображения с использованием билинейной интерполяции для устранения эффекта ступенчатости при повороте изображений с резкими контурами
Замечания и рекомендации
Возможная реализация медианного фильтра для цветных изображений: независимая обработка R, G и B каналов, либо выбор значения из окрестности, минимизирующего суммарное расстояние до остальных значений пикселей из окрестности.
При применении операций фильтрации необходима корректная обработка границ изображения за счёт использования любого из методов экстраполяции: чётного продолжения, нечётного продолжения, дублирования граничных пикселей.
Результаты некоторых операций обработки изображений, приводящих к появлению изображений с отрицательными значениями пикселей, например, фильтр Собеля, нужно визуализировать, добавляя к каждому пикселю значение 128 — серую подложку.
Гамма-коррекция применяется дважды: сначала интенсивность пикселей изображения преобразуется в линейный диапазон, затем применяется фильтр Гаусса, затем гамма-коррекция обращается.
Формат параметров командной строки
Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:
%programname% (command) (parameters...) (input_image) (output_image)
Список команд:
mirror {x|y} | | Отражение по горизонтали или по вертикали, в зависомсти от указанного параметра |
rotate {cw|ccw} (angle) | | Поворот по или против часовой стрелки на заданное количество градусов, например: rotate cw 90 |
sobel {x|y} | | Фильтр Собеля, обнаруживающий горизонтальные или вертикальные контуры |
median (rad) | | Медианная фильтрация, параметр rad — целочисленный радиус фильтра, то есть размер фильтра — квадрат со стороной (2 * rad + 1) |
gauss (sigma) (gamma) | | Фильтр Гаусса, параметр sigma — вещественный параметр фильтра, gamma — значение гаммы |
gradient (sigma) | | Модуль градиента |
Примеры изображений
 Исходное изображение |
 Горизонтальный фильтр Собеля, способ визуализации: перевод в серое и взятие модуля |
 Горизонтальный фильтр Собеля, способ визуализации: добавление подложки |
 Вертикальный фильтр Собеля |
 Горизонтальное отражение |
 Поворот на 90 градусов против часовой стрелки |
 Поворот на 75 градусов против часовой стрелки без билинейной интерполяцией |
 Поворот на 75 градусов против часовой стрелки с билинейной интерполяцией |
 Медианная фильтрация с радиусом 2 |
 Фильтр Гаусса с σ=3 |
 Фильтр Гаусса с σ=3 и гамма-коррекцией с гаммой 2.2 |
 Модуль градиента, вычисленный с помощью свёрток с производными фильтра Гаусса с σ=1 (яркость увеличена в 4 раза) |
Справочные материалы
Задание 2: Анализ изображений
Обязательная часть задания
Программа должна открывать и сохранять изображения в формате BMP или в семействе форматом PBM/PGM/PPM.
Должны быть реализованы следующие алгоритмы:
- Вычисление метрик сравнения изображений: MSE и PSNR
- Вычисление метрик сравнения изображений: SSIM и MSSIM
- Алгоритм детектирования контуров Канни
- Фильтр Габора с произвольными параметрами
Дополнительная часть задания
- Обнаружение сосудов на изображениях глазного дна с помощью фильтров Габора
Замечания и рекомендации
В метрике SSIM рассматривается один блок — всё изображение. Для метрики MSSIM (Mean-SSIM) предлагается разбиение изображения на блоки 8х8.
В алгоритме Канни должны быть корректно реализованы все его вспомогательные этапы: вычисление модуля градиента, подавление немаксимумов и гистерезис.
Входными параметрами алгоритма Канни являются три числа: параметр фильтра Гаусса (сигма), используемый для вычисления производных, и два пороговых значения, задаваемых в виде коэффициента относительно максимального значения модуля градиента на изображении.
Для отладки фильтра Габора удобно взять чёрное изображение с белой точкой посередине, тогда результатом свёртки будет ядро фильтра Габора.
Результат необходимо отконтрастировать и преобразовать аналогично фильтру Собеля, добавив серую подложку.
Обнаружение сосудов предлагается реализовать как взятие максимума (или минимума в зависимости от реализации) отклика среди фильтров Габора нескольких направлений.
Формат параметров командной строки
Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:
%programname% (command) [parameters...] (input_image) (output_image)
%programname% (command) (input_image_1) (input_image_2)
Список команд:
mse | | Вычисление метрики MSE, на вход подаётся два изображения, результат выводится в консоль - одно число |
psnr | | Вычисление метрики PSNR |
ssim | | Вычисление метрики SSIM |
mssim | | Вычисление метрики MSSIM |
canny (sigma) (thr_high) (thr_low) | | Детектирование границ с помощью алгоритма Канни. Первый параметр — сигма для вычисления частных производных, следующие два параметра - больший и меньший пороги соответственно |
gabor (sigma) (gamma) (theta) (lambda) (psi) | | Свёртка с фильтром Габора (вещественной частью), углы задаются в градусах |
vessels (sigma) | | Обнаружение сосудов заданного масштаба |
Примеры изображений
 Исходное изображение для алгоритма Канни |
 Результат детектирования контров Канни с параметрами σ=2, thr_high = 0.02, thr_low = 0.002 |
 Визуализация ядра фильтра Габора: σ=3, γ=1, θ=π/6, λ=6, ψ=0 |
 Ещё пример ядра фильтра Габора |
 Исходное изображение для применения фильтров Габора |
 Результат обработки исходного изображения с помощью фильтра Габора, вызов с параметрами: &programname% gabor 3 1 30 6 0 input.png output.png |
 Изображение для выделения сосудов |
 Результат выделения сосудов для σ=2 — взятие для каждого пикселя максимального по модулю значения свёртки с фильтром Габора и сохранение только отрицательных значений |
Справочные материалы
Задание 3: Обработка и анализ изображений
Обязательная часть задания
Программа должна открывать и сохранять изображения в формате BMP или в семействе форматом PBM/PGM/PPM.
Должен быть реализован следующий алгоритм:
- Билатеральная фильтрация изображений
Билатеральная фильтрация похожа на фильтр Гаусса, но, в отличие от фильтра Гаусса, значение весов пикселей при усреднении зависит не только от расстояния до них, но и от разности интенвивности с центральным пикселем. Это позволяет осуществлять шумоподавление, одновременно сохраняя высокочастотные структуры, такие как контуры.
Дополнительная часть задания
Дополнительно предлагается реализовать следующий алгоритм обработки изображений:
- Алгоритм Харриса для детектирования углов
Формат параметров командной строки
Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:
%programname% (command) [parameters...] (input_image) (output_image)
Список команд:
bilateral {sigma_d} {sigma_r} | | Билатеральная фильтрация |
harris {sigma} | | Детектор углов Харриса с параметром σ |
Примеры изображений
 Исходное изображение с шумом |
 Билатеральная фильтрация с параметрами sigma_d = 5, sigma_r = 20 |
 Исходное изображение |
 Результат детектора Харриса с параметром sigma = 3 |
Справочные материалы