Задание 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 — взятие
для каждого пикселя максимального по модулю
значения свёртки с фильтром Габора
и сохранение только отрицательных значений

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