Детектирование контуров и шумоподавление

Обязательная часть задания

Должны быть реализованы следующие алгоритмы:

  • Визуализация дискретизированных направлений градиента (составная часть алгоритма Канни)
  • Подавление немаксимумов модуля градиента (составная часть алгоритма Канни)
  • Конечный результат алгоритма детектирования контуров Канни
  • Подавление шума с помощью билатеральной фильтрации

Билатеральная фильтрация похожа на фильтр Гаусса, но, в отличие от фильтра Гаусса, значение весов пикселей при усреднении зависит не только от расстояния до них, но и от разности интенсивности относительно центрального пикселя. Это позволяет осуществлять шумоподавление, одновременно сохраняя высокочастотные структуры, такие как контуры.

Указания

Градиент должен вычисляться как в первом задании — через свёртку с производными функции Гаусса.

Дискретизированные направления градиента должны быть визуализированы следующим образом:

  • 0 — модуль градиента равен нулю;
  • 64 — направление градиента наиболее близко к оси Ox;
  • 128 — направление градиента наиболее близко к оси Oy;
  • 192 — направление градиента наиболее близко к главной диагонали;/li>
  • 255 — направление градиента наиболее близко к побочной диагонали.

Вывод результата немаксимального подавления должен быть аналогичен вычислению модуля градиента из первого задания: диапазон [0, gmax] должен быть отмасштабирован до [0, 255].

Результатом работы алгоритма Канни является бинарная маска контуров — значения пикселей должны быть 0 или 255.

В алгоритме Канни должны быть корректно реализованы все его вспомогательные этапы: вычисление модуля градиента, подавление немаксимумов и гистерезис. Входными параметрами алгоритма Канни являются три числа: параметр фильтра Гаусса (сигма), используемый для вычисления производных, и два пороговых значения, задаваемых в виде коэффициентов относительно максимального значения модуля градиента gmax после немаксимального подавления.

Формат параметров командной строки

Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:

%programname% (command) [parameters...] (input_image) (output_image)

Список команд:

dir (sigma)   Визуализация направлений градиента
nonmax (sigma)   Результат немаксимального подавления
canny (sigma) (thr_high) (thr_low)   Детектирование границ с помощью алгоритма Канни. Первый параметр — сигма для вычисления частных производных, следующие два параметра — вещественные числа — больший и меньший пороги соответственно
bilateral (sigma_d) (sigma_r)   Билатеральная фильтрация.

Примеры изображений


Исходное изображение для алгоритма Канни

Результат детектирования контуров Канни
canny 2 0.02 0.002

Исходное изображение с шумом

Билатеральная фильтрация
bilateral 5 20

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