Федеральное агентство по образованию
ГОУ ВПО Рыбинская государственная авиационная технологическая академия
имени П. А. Соловьёва
Факультет Радиоэлектроники и информатики
Кафедра Вычислительных систем
КУРСОВОЙ ПРОЕКТ
по дисциплине
Технология программирования
на тему
Сегментация изображения в видеопотоке
Пояснительная записка
Студент группы ВС2-08 Широкова Е.Н.
Руководитель канд. техн. наук, доцент Паламарь И. Н.
Нормоконтролер канд. техн. наук, доцент Паламарь И. Н.
Рыбинск 2011
Содержание
Содержание 4
Введение 8
2 Разработка математической модели системы 11
1) Простейший алгоритм. 12
Класс TNRBackground наследует все поля, свойства и методы от предка, кроме поля Mask. Так как этот класс используется для описания заднего плана при нормальном распределении, то поле Mask будет представлять собой два двумерных массива, в одном будет храниться математическое ожидание, в другом – среднее квадратичное отклонение (формула 2.4). В нем поле delt тоже отвечает за точность e (формула 2.5). Конструктор и функция сравнения в этом классе будут перекрываться. В конструктор уже необходимо передавать первые n кадров, то есть массив, а для функции сравнения необходима другая реализация. 15
Так как обработка кадра довольно трудоемкий процесс, поэтому ее необходимо выполнять в отдельном потоке. Для вывода и обработки кадров используется класс TShowAnim типа TThread. 16
4 Проектирование программы 17
4.1 Разработка интерфейса 17
- «Чувствительность» задает точность текущего алгоритма; 18
- «Уровень» влияет на скорость обработки, от него зависит шаг обработки текущего кадра. 18
- «Порог сохранения» настраивается в соответствии со значением «Порог», которое располагается внизу в строке состояния. Если «Порог сохранения» меньше, чем значение в строке состояния, то данный кадр считается переднеплановым (на нем существуют движущиеся фрагменты), то, в зависимости от элемента «Сохранять в:» и от пути сохранения, которые указаны внизу после лога программы, текущий кадр сохраняется в указанную папку. 18
- «Сохранить время и дату» используется для сохранения лога программы в текстовом формате. 18
- «Сбросить» останавливает обработку текущим алгоритмом, после чего можно выбрать другой алгоритм и продолжить обработку. 18
- «Звуковое оповещение» выдает звуковой сигнал при обнаружении движения. 18
- «Сегментация» вместо видео отображается результат сегментации, где движущиеся сегменты показаны черным цветом. 18
4.2 Разработка алгоритмов 19
23
Данный алгоритм отличается от предыдущего только методом сравнения текущего пикселя с маской. Маска состоит из двух параметров математического ожидания M и среднего квадратичного отклонения D. Чувствительность алгоритма определяет е. В качестве условия используется формула 2.5. 26
Блок схема представлена на рисунке 4.5. 26
27
Рассмотрим механизм работы с видеоустройствами. Для этого в программе используется пакет DSPack. 28
28
Рис. 4.6 – Структура классов пакета DSPack 28
DSPack использует механизм DirectShow, и имеет следующие компоненты: 28
- TFilterGraph. Этот компонент – обертка над менеджером графа фильтров DirectShow. Используется для построения и управления графом фильтров. 28
- TFilter, является оболочкой над интерфейсом, представляющим фильтр–IbaseFilter. Этот интерфейс предоставляет методы для управления фильтром. Его реализуют все фильтры DirectShow. 28
- TVideoWindow, используется для отображения (рендеринга) проходящих через граф фильтров данных. 29
При запуске приложения нужно провести поиск доступных видеоустройств. Для этого создается объект класса SysDevEnum, который служит для создания списка устройств. В данной программе используются видео устройства, это и указывается при создании объекта: 29
SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory); 29
Нам же необходимо вывести список всех доступных устройств в меню, для последующего выбора: 29
if SysDev.CountFilters > 0 then 29
for i := 0 to SysDev.CountFilters - 1 do 29
begin 29
Device := TMenuItem.Create(Devices); 29
Device.Caption := SysDev.Filters[i].FriendlyName; 29
Device.Tag := i; 29
Device.OnClick := OnSelectDevice; 29
Devices.Add(Device); 29
end; 29
При щелчке мыши на имени соответствующего устройства вызывается обработчик события OnSelectDevice, в котором происходит процедура построения графа фильтров для выбранного устройства: 29
Filter.BaseFilter.Moniker:= SysDev.GetMoniker(TMenuItem(Sender).tag); 29
FilterGraph.Active := true; 29
with FilterGraph as ICaptureGraphBuilder2 do 29
RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter); 29
FilterGraph.Play; 29
Для получения изображения из видеопотока используется компонент SampleGrabber. Имеющий процедуру SampleGrabber.GetBitmap(img). 29
Так же необходимо знать разрешение видео, ширину и высоту. Они находятся с помощью SampleGrabber: Реализация представлена в следующей процедуре: 30
procedure TVideoForm.GetResolution(var VWidth,VHeight:integer); 30
var 30
info:_AMMediaType; 30
begin 30
SampleGrabber.SampleGrabber.GetConnectedMediaType(info); 30
VWidth:=VIDEOINFOHEADER(info.pbFormat^).bmiHeader.biWidth; 30
VHeight:=VIDEOINFOHEADER(info.pbFormat^).bmiHeader.biHeight; 30
end; 30
5 Разработка контрольного примера (тестирование) 31
Рассмотрим работу программы с различными алгоритмами сегментации. Так как камеры имеют различный уровень шумов, то логично было бы выбрать в качестве входных данных видеофайл, не имеющий шумов(создан в программе 3DSMax), и видеофайл, записанный с помощью простой веб-камеры. 31
5.1 Входные данные - видеофайл без шумов. 31
1) Простой алгоритм 31
31
Заключение 36
Список использованных источников 38
Введение
Тема моей курсовой работы – сегментация изображения в видеопотоке. В наше время эта тема является достаточно актуальной, так как цель сегментации заключается в упрощении или изменении представления изображения, чтобы его было проще и легче анализировать.
Сегментация – это процесс разделения цифрового изображения на несколько сегментов (множество пикселей, также называемых суперпикселями). Более точно, сегментация изображений – это процесс присвоения таких меток каждому пикселю изображения, что пиксели с одинаковыми метками имеют общие визуальные характеристики.
Моя программа предназначена для отслеживания движущихся объектов в видеопотоке.
Нахождение и отслеживание движущихся объектов в видеопотоке является важной задачей для таких приложений, как охранные системы, системы анализа потока машин на автомагистрали, распознавание лиц, отпечатков пальцев, выделение обьектов на спутниковых снимках и т. д.
1 Анализ технического задания
Данная программа предназначена для сегментации видеоизображения. В качестве входных данных можно использовать как видеофайлы любого формата, так и видео, получаемое непосредственно с вебкамер, которые установлены на компьютере.
В программе будут реализованы свои классы с наследованием, конструкторами, деструкторами, ограничением доступа к элементам класса, свойствами и абстрактными методами.
Программа снабжается помощью с разделами, где будут описываться режимы работы программы и описание элементов управления.
Программа должна работать без сбоев, без зависаний и не нарушать работу операционной системы. Обязательно будет реализована обработка исключительных ситуаций и контроль вводимой информации.
