Обязательная часть задания
Должны быть реализованы следующие алгоритмы:
- Вычисление модуля градиента, используя свёртки с производными функции Гаусса.
- Подавление немаксимумов модуля градиента (составная часть алгоритма Канни).
- Конечный результат алгоритма детектирования контуров Канни.
Модуль градиента должен быть отнормирован таким образом, чтобы максимальное значение модуля градиента стало равно 255: после вычисления модуля градиента стоит найти максимальное значение gmax и умножить результат на 255 / gmax.
Результатом работы алгоритма Канни является бинарная маска: значения пикселей должны принимать значения только 0 или 255.
В алгоритме Канни должны быть корректно реализованы все его вспомогательные этапы: вычисление модуля градиента, подавление немаксимумов и гистерезис. Входными параметрами алгоритма Канни являются три числа: параметр фильтра Гаусса (сигма), используемый для вычисления производных, и два пороговых значения, задаваемых в виде коэффициентов относительно gmax — максимального значения модуля градиента на изображении.
Дополнительная часть задания
Должен быть реализован следующий алгоритм:
- Выделение сосудов на изображениях глазного дна с помощью алгортма детектирования хребтовых структур (ridge detection).
Алгоритм ridge detection реализуется аналогично алгоритму Канни с той разницей, что:
- Вместо модуля градиента берётся максимальное по модулю собственное значение матрицы Гессе.
- В качестве направления для подавления немаксимумов вместо вектора градиента берётся собственный вектор для данного собственного значения.
Сосуды на обрабатываемых изображениях темнее фона, поэтому пиксели, в которых наибольшее по модулю собственное значение является отрицательным, должны быть исключены из результата.
Проверку на "хребтовость" (|L1| >> |L2|) можно опустить.
Результат подавления немаксимумов должен быть отнормирован до диапазона [0, 255] аналогично обязательной части задания.
Результатом выделения сосудов является объединение отнормированных изображений после подавления немаксимумов, полученных для различных значений параметра фильтра Гаусса (сигма). Рекомендуется использовать значения 2, 3 и 4. Объединение представляет собой попиксельное взятие максимума.
Рекомендации
- Частой ошибкой при вычислении градиента изображения является свёртка с производной одномерной функции Гаусса. Правильно брать двумерную функцию Гаусса и вычислять производные двумерной функции.
Формат параметров командной строки
Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:
python main.py (command) [parameters...] (input_image) (output_image)
Список команд:
grad (sigma) |
|
Вычисление модуля градиента |
nonmax (sigma) |
|
Результат немаксимального подавления |
canny (sigma) (thr_high) (thr_low) |
|
Детектирование границ с помощью алгоритма Канни. Первый параметр — сигма для вычисления градиента, следующие два параметра — вещественные числа — больший и меньший пороги соответственно |
vessels |
|
Детектирование сосудов согласно предложенному алгоритму |
Примеры изображений
|
Исходное изображение |
|
Модуль градиента для σ = 1 grad 1 |
Модуль градиента для σ = 2 grad 2 |
Модуль градиента для σ = 4 grad 4 |
Немаксимальное подавление для σ = 1 grad 1 |
Немаксимальное подавление для σ = 2 grad 2 |
Немаксимальное подавление для σ = 4 grad 4 |
Детектирование контуров для σ = 2 canny 2 0.3 0.3 |
Детектирование контуров для σ = 2 canny 2 0.3 0.1 |
Детектирование контуров для σ = 2 canny 2 0.1 0.03 |
Детектирование контуров для σ = 4 canny 4 0.3 0.3 |
Детектирование контуров для σ = 4 canny 4 0.3 0.1 |
Детектирование контуров для σ = 4 canny 4 0.1 0.03 |
Исходное изображение |
Результат выделения сосудов vessels |
Справочные материалы