Задание 1. "Редактор изображений"

Авторы: Антон Конушин, Роман Шаповалов, Никита Четвериков, Павел Батанов

Начало: 18 сентября 2012
Конец: 2 октября 2012 (23:59)

Цель задания

Познакомиться на практике с основными операциями обработки изображений и получить базовые навыки работы с GUI.

Описание задания

Необходимо реализовать простейший редактор изображений.

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

  • Коррекция контраста изображения: линейное растяжение гистограммы яркости, поканальное растяжение гистограммы.
  • «Серый мир», медианная фильтрация, произвольное линейное преобразование (в частности, должны быть реализованы фильтр Гаусса и выделение границ оператором Собеля (линейная свертка с оператором 3х3)).
  • Геометрические преобразования: поворот и масштабирование изображения.

Для выравнивания контрастности необходимо вначале посчитать интенсивность в каждом пикселе, например, по формуле из стандарта BT.709: Y = 0.2125·R + 0.7154·G + 0.0721·B, и построить гистограмму интенсивностей. Затем нужно рассчитать преобразование для каждого канала. Также необходимо реализовать независимое растяжение диапазона для трёх цветовых каналов.

Интерфейс редактора должен позволять задавать константу σ, отвечающий за радиус фильтра сглаживания. Необходимо правильно подобрать размер и коэффициенты ядра свёртки для фильтрации.

Для операций по геометрических преобразованиям должны быть предусмотрены поля для ввода параметров преобразования. Для поворота должен задаваться угол поворота изображения. Для масштабирования изображения должен задаваться коэффициент увеличения/уменьшия изображения. При преобразованиях поворота и масштабирования должна применяться билинейная интерполяция, чтобы не было артефактов дискретизации. Обращаю ваше внимание на то, что при повороте размер изображения не должен меняться.

Базовая часть обязательна для выполнения, без выполнения этой части дополнительные баллы начисляться не будут.

Дополнительная часть

Эта часть задания не обязательна для реализации. За её выполнение можно получить дополнительные баллы.

  • Выделение и обработка региона интереса. Пользователь наводит курсор мыши на левый верхний угол желаемого региона (пусть у него координаты (x0,y0)), нажимает левую кнопку мыши и, не отпуская, тянет до нижнего правого угла (x1,y1). После того, как он отпускает кнопку, координаты углов задают прямоугольник интереса. Редактор после этого должен нарисовать на экране рамку, соответствующую прямоугольнику. Желательно (но не обязательно) отображать рамку также в процессе рисования. Выбранное преобразование затем должно применяться только к региону интереса.
  • Сепарабельный фильтр Гаусса. Быстрая реализация фильтра Гаусса.
  • Спецэффект «Волны» или «Стекло». Необходимо реализовать один из указанных спецэффектов, расмотренных на лекции.
  • Любой декоративный фильтр по выбору (например, «Неоновая подсветка»).

Также будут выдаваться бонусные баллы за быструю реализацию тех или иных фильтров (при условии корректной работы базы).

Программная реализация

Для упрощения выполнения задания и унификации проверки для вас подготовлена заготовка пользовательского инетфейса. Она написана на С++ с использованием библиотек Qt, умеет загружать распространенные форматы изображений и в качестве примера работы с ними выполняет простое преобразование — перевод изображения в оттенки серого. Также реализован консольный вариант запуска программы с демонстрационными параметрами.

При выполнении работы запрещается использование готовых функций фильтрации и преобразования изображений.

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

Программная реализация должна быть выполнена желательно с использованием выданного каркаса, библиотек C++ Qt и Visual Studio 2008/2010. Допустимо — QtCreator. Другие языки не запрещаются, но и не поощряются. Любители экзотики имеют шанс остаться на апелляцию только из-за того, что проверяющий не сможет собрать/запустить ваш код.

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

./program.exe [options] <input> <output>
где options могут быть (важна только первая):
-g --gaussian <sigma> (вместо обычного преобразования можно использовать сепарабельное под этим же параметром)
-m --median <radius>
-s --sobel
-a --gray-world
-c --autocontrast (линейное растяжение)
-l --autolevels (поканальное растяжение)
-r --rotate <degrees>
-z --resize <scale>
-k --custom <kernel> (kernel в формате (с кавычками) 'a11,a12,a13;a21...a33' минимум 3х3)

Каждый параметр реализует соответствующее задание из базы.

В приложенном каркасе реализованы не все опции, а только сделана пара демонстрационных примеров. Для парсинга опций использован этот код.

Ссылки:

Баллы

  • Базовая часть (12 баллов)
  • Спецэффект «Волны» или «Стекло» (+1 балл)
  • Сепарабельный фильтр Гаусса. Быстрая реализация фильтра Гаусса. (+1 Балл)
  • Обработка региона интереса и его выделение с помошью мыши (+4 балла)
  • Скорость работы (будут награждены самые быстрые работы, у которых будет возможен консольный запуск) (до +3 баллов)
  • Собственная реализация интерфейса (до +2 баллов)
  • Декоративный фильтр (+1 баллов)

Оформление

Готовое задание загружается на сайт курсов в виде архива определённой структуры.
Не забудьте положить в архив файл readme.txt. Укажите выполненные подзадания:

Спецэффект «Волны» или «Стекло» [+/−]

См. также Информацию о курсе и FAQ.

Результаты работы

Результаты будут опубликованы на сайте курсов. Вопросы можно задать в форуме курса.
Задание выполняется строго индивидуально. Cовместная работа или обмен кусками кода, при условии что факт командной работы не был указан в readme.txt, считается плагиатом и оценивается в −5 баллов всем участникам.

© Лаборатория компьютерной графики при ВМиК МГУ