Задание 1: Активные контуры

Задание в рамках курса «Вариационные методы обработки изображений».

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

Требуется написать программу, реализующую метод сегментации изображения с помощью активных контуров.

Выбор внешней энергии на усмотрение студента, однако он обязательно должен содержать line energy (E_line) и edge energy (E_edge). Наличие balloon force на усмотрение студента.

Рекомендуемое начальное приближение для активного контура предоставляется в виде текстового файла. При желании, его можно менять. Также предоставляется набор утилит (utils.py) для конвертации активного контура, представленного массивом точек numpy.array, в бинарную маску.

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

Язык реализации — Python 3. Программа либо должна состоять из одного файла, либо иметь главный файл с именем main.py. Задача реализовать метод самостоятельно. Использовать готовые реализации из skimage, opencv и пр. — нельзя. Допустимо использовать библиотеки для базовых вещей (интерполяция, обращение матриц, градиенты, свертки и пр.), общепринятые для обработки изображений (scipy, numpy).

Один и тот же код должен работать для всех входных изображений. Для получения результата можно изменять только параметры. Результатом работы программы является бинарная маска объекта, сохраненная в png файл, где белое (255) — это объект, а черное (0) — это фон. Готовое решение должно быть либо загружено на сайт, либо отправлено на почту khvostikov@cs.msu.ru.

Критерии оценки

Уже хорошо, если программа выдаст результат (маску сегментации), и он будет близок по метрике (IoU > 0.7) к ground true для 3 из 5 картинок.

Рекомендации

К входным картинкам можно (и иногда нужно) применять простейшие фильтры, такие как медиана или Гаусс. Для чтения начального приближения активного контура можно использовать numpy.loadtxt.

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

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

%programname% (input_image) (initial_snake) (output_image) (alpha) (beta) (tau) (w_line) (w_edge) (kappa)

Аргументы:

input_image   Имя файла — входное изображение
initial_snake   Имя файла с начальным приближением для активного контура
output_image   Имя файла — выходное изображение
alpha   Параметр alpha внутренней энергии, отвечающий за растяжимость контура
beta   Параметр beta внутренней энергии, отвечающий за жесткость контура
tau   Шаг градиентного спуска
w_line   Вес слагаемого интенсивности во внешней энергии
w_edge   Вес слагаемого границ во внешней энергии
kappa   Вес balloon force (опционально)

В качестве результата необходимо прислать код программы, а также текстовый файл в котором прописаны параметры, с которыми нужно вызывать программу для каждого изображения:

%programname% astranaut.png astranaut_init_snake.txt astranaut_result.png 1.0 2.0 0.1 -0.1 0.5 0.1
%programname% coins.png coins_init_snake.txt coins_result.png 2.0 1.0 0.2 0.1 -0.5 0.01

и т.д.

Исходные данные

Исходные данные: ZIP.
В архиве находятся исходные изображения, начальные приближения для активных контуров, маска сегментации ground truth.