Введение в компьютерную графику
Полугодовой курс ВМиК МГУ, 2003
     

Задание №3. Обработка и анализ изображений.

Начало: 13 марта 2003 года.
Конец: 27 марта 2003 года (23:59)

Автор задания:
Вежневец Владимир

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

На изображениях для обработки находятся 3 типа объектов интереса: круги на циферблате, соответствующие 1-11 часам, вытянутый прямоугольник, соответствующий 12 часам, и стрелки часов. Все остальное - шум, нас не интересующий. Для облегчения задания центр циферблата (место соединения стрелок) также отмечено кругом, что существенно облегчает задачу распознавания (позже объясню, почему).

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

Правила отображения результатов:

  1. Нарисовать окружность с центром, совпадающим с циферблатом, и радиусом, равным расстоянию от центра до середины прямоугольника, соответствующего "12 часам";
  2. Нарисовать отрезок соединяющий "6 часов" и "12 часов";
  3. Поверх стрелок нарисовать прямые, указывающие их направление;
  4. Поверх всего циферблата (не закрывая его слишком сильно) напечатать время, которое показывают часы;

Dib1.gif (3353 bytes)

Исходная картинка (слева) и результат работы (справа)

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

Требуется написать программу, выполняющую следующие операции над изображениями из категории "simple" (отсутствие шума, центр отмечен кругом):

  • Загрузка и отображение BMP-файла. Достаточно сделать поддержку только  RGB (непалитровых) форматов изображений;
  • Преобразование изображения в бинарное с помощью алгоритма k-средних (другие алгоритмы не принимаются);
  • Выделение связных областей любым из алгоритмов, рассказаных на лекции;
  • Вычисление инвариантных характеристик областей и их классификация - (стрелки, указатель 12 часов, указатели 1-11 часов);
  • Реализация операций математической морфологии (cужение, расширение, открытие, закрытие);
  • Распознавание направления стрелок;
  • Распознавние и отображение времени, показываемого часами . Отображние должно быть оформлено, как написано выше, все 4 пункта правил отображения обязательны.

Программа должна реализовывать универсальный алгоритм, одинаково (правильно) работающий на всех изображениях из категории "simple". За реализация минимального задания дается 8 баллов.

Для тех, кто хотел бы самостоятельно придумать алгоритм распознавания времени для картинок "simple", я здесь ничего не пишу. Те, кому нужна подсказка, найдут ее здесь.

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

За быструю работу алгоритмов, удобный и красивый (не путать с вычурным) интерфейс и аккуратно и грамотно оформленный код (в соотвествии с рекомендациями) будут начисляться призовые баллы (всего не более +3 баллов). Также дополнительно поощряются:

  • Реализация медианной фильтрации с задаваемым размером окрестности (+2 балла)
  • Реализация выделения связных областей путем последовательного сканирования (+2 балла)

Для каждой категории изображений "simple" дается набор аналогичных зашумленных изображений. За успешное обработку с применением шумоподавления известными вам способами (фильтр Гаусса, медианный фильтр, математическая морфология) зашумленных изображений дается дополнительно до +4 баллов (в зависимости от того, с какими картинками справитесь). Имейте ввиду, что шумоподавление можно применять как до перевода изображения в бинарное, так и после - выбор алгоритма за вами. В файле readme обязательно должно быть описано, как именно подавляется шум (последовательность фильтров, их параметры). Если не удается найти универсальную последовательность фильтров для шумоподавления для всех изображений с шумом, можно сделать свою последовательность для каждого шумного изображения, вызываемую из меню программы.

Советы:
Пробуйте разные фильтры, морфологию с разными структурными элементами.
Для одной из картинок из раздела "шумных" требуется разделение на 3 кластера яркости, а не на два (в k-средних k=3).
Пробуйте применять различные предобработки для разных задач. Скажем, для нахождения указателей 1-11 и 12 часов - одна последовательность фильтров, после этого, опираясь на полученные знания, можно применить к исходному изображдению другую последовательность фильтров для нахождения стрелок.

Крайне желательно, чтобы программа была под Windows.

Исходные данные для обработки

Архив с изображениями "simple"
Архив с зашумленными изображениями

Обязательные требования

Обязательное требование - выполнить обязательную часть задания.

Еще одно обязательное требование - разбираться в материале. В спорных ситуациях оценка выставляется после личной беседы, выявляющей понимание принципа действия основных алгоритмов.

К программе должны прилагаться все необходимые для ее запуска библиотеки (опускать можно только слишком большие библиотеки, если они явлются стандартными). Отсутствие библиотек создает неудобства при проверке, однако не фатально. У нас есть набор из наиболее часто недостающих библиотек для Borland C++ Builder и MS Visual C++.

Оформление

Оформление не отличается от обычного.

ZIP-архив с исходными текстами и исполняемыми файлами, названный по схеме GZV_nnnnnnnn.zip (где G - последняя цифра номера группы, Z - номер задания, V - номер версии задания, nnnnnnnn - номер студенческого билета) присылайте на assign3@graphics.cs.msu.su

Например, студент 206 группы с номером студенческого билета 06529042, сдающий обновленную (вторую) версию программы по второму заданию, должен прислать архив с именем 622_06529042.zip.

Также смотрите здесь, какие файлы нам присылать и как их оформить Советуем очень внимательно прочитать весь FAQ

Не забудьте положить в архив файл readme.txt. В файле описать интерфейс програмы (алгоритм работы с программой, пункты меню, управляющие клавиши)

!Внимание: обратите внимание на правильное именование и структуру архива с работой, а также на содержание файла readme.txt. Если ваша работа не будет соответствовать требованиям, баллы могут быть снижены.

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

Результаты смотрите в интернете и/или на стенде около комнаты 703.

Примечания

  1. Задание выполняется строго индивидуально. За совместную работу или обмен кусками кода ставится ноль баллов всем участникам, если факт командной работы не был указан в readme.txt заданий.
  2. Рекомендуется написание программы под семейство ОС Windows. Написание под другие операционные системы нежелательно и может вызвать задержки с проверкой таких работ.

ЧаВо по заданию

Почему иногда не работает алгоритм k-средних?

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

Пример: изображения с яркостями от 0 до 130. Если при первом шаге разделения выпадут случайные средние 128 и 200, то получится, что к среднему яркости 200 не окажется приписанным ни одного пикселя. И в результате получится один кластер вместо двух.

Чтобы избежать этой ситуации нужно иметь ввиду такую возможность и предпринимать некие действия для решения проблемы, например: случайным образом вычислять средние исходя из реального диапазона яркостей изображения (в нашем примере от 0 до 130), и/или при обнаружении среднего с нулем приписанных к нему пикселей заново инициализировать его случайным образом.

Если разметку связных областей проводить рекурсивным методом, то на 5 и 6 картинках переполняется стек. Как этого избежать?

Этого можно избежать использую некоторую предобработку изображения или выделяя оболасти нерекурсивно, но поскольку это не входит в минимальную часть задания, мы выкладываем изображения, на которых это происходить не будет. Можно пользоваться как изображениями 5, 6 из предыдущего архива так и из поправленного.

Архив с поправленными изображениями 5 и 6.

Какие функции нужно обязательно выносить в пользовательский интерфейс?

Нужно предусмотреть возможность вызвать (кнопкой или меню):

  • Цикл полной обработки изображения для вычисления времени на часах
  • Операции математической морфологии (все 4)
  • Медианный фильтр, с возможностью задать размер окрестности (если реализован)
Все остальные функции также желательно вынести в интерфейс, но перечисленное выше - обязательно.

Я придумал хитрый алгоритм распознавания, отличающийся от данного в задании. Я молодец?

Если алгоритм работает - то да. Не забудьте только реализовать вещи, перечисленные в обязательной части. И еще не забудьте описать в readme ваш алгоритм (четко, кратко и понятно). Оригинальные идеи будут премироваться дополнительными баллами.

Что будет с теми кто пришлет плагиат?

Мы подумываем о том, чтобы ужесточить меры, принимаемые к плагиатчикам. Вполне вероятно за третье задание будут ставиться отрицательные баллы всем владельцам одинаковых работ. Берегите ваши работы от нечистоплотных любителей халявы.

Your comments and questions: vvp@graphicon.ru
Главная | О курсе | Лекции | Библиотека | Задания | Оценки | FAQs
  (с) Лаборатория компьютерной графики, 1997-2003
Дизайн: Алексей Игнатенко