Учебно-методические материалы по курсу "Современные методы обработки изображений" (магистратура)

В рамках курса предполагается выполнение трёх практических заданий:
  • Задание 1: Основы работы с изображениями. Срок выполнения: 26 октября 2017 г.
  • Задание 2: Анализ изображений. Срок выполнения: 16 ноября 2017 г.
  • Задание 3: Обработка и анализ изображений. Срок выполнения: 7 декабря 2017 г.

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

  • Интерфейс: программа должна поддерживать интерфейс командной строки со строгим соблюдением формата входных данных, описанном в каждом задании. Входные параметры при тестировании программы будут всегда корректны, валидация входных параметров не требуется.
  • Формат изображений: все входные изображения будут в формате 24-bit BMP.
  • Формат параметров: все числовые значения должны вводиться и выводиться в международном формате с точкой в качестве разделителя целой и дробной части (для использующих C# — InvariantCulture).
  • Языки программирования: C/C++, C#. Использование других языков — по договорённости.
  • Операционная система: проект должен быть платформенно-независимым.
  • Использование сторонних библиотек: в проекте не должно быть внешних зависимостей, не разрешается использовать функциональность сторонних библиотек для работы с изображениями, за исключением чтения и записи изображений. Цель выполнения заданий заключается в закреплении материала и понимании основных методов обработки изображений.

Методика оценки

  • Задание считается выполненным только при успешной проверке обязательной части задания
  • Если программа некорректно обрабатывает границы изображения (не обрабатывает, либо выдаёт шум или другие неествественные результаты), то соответствующий пункт задания считается невыполненным
  • Время выполнения заданий и количество попыток сдачи не ограничено, однако, за выполнение задания в срок могут начисляются дополнительные баллы

Требования к оформлению программ для сдачи

Выполненное задание должно представлять собой архив (рекомендуется: zip, rar) со следующей структурой:
  • Директория bin — сюда должен быть помещён исполняемый файл
  • Директория src — исходный код программы
  • Файл info.txt — файл с информацией о выполненном задании следующего формата:
    ФИО: Иванов И.И.
    Задание: 1 / Основы работы с изображениями
      обязательная часть задания [+]
      реализация фильтра Собеля [+]
      реализация фильтра Гаусса [+]
      реализация детектора границ Канни [-]
    
    Система: Microsoft Visual Studio 2012
    ОС: Windows 7 64bit
    
    Комментарии:
      1. Для работы программы необходим Microsoft .NET Framework 4.0
    Выполненные задания отмечаются знаком [+], невыполненные — [−].

Далее этот архив необходимо отправить через форму. Форма доступа при входе на сайт.

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

Задание 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

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